#!/usr/bin/env python3
"""Auto-generated by AGI Loop cycle #1090
Task: Write a Python function that implements merge sort and counts the number of inversions
Generated: 2026-02-12T19:53:09.629029
"""

def merge_sort(arr):
    if len(arr) <= 1:
        return arr, 0

    mid = len(arr) // 2
    left, inv_left = merge_sort(arr[:mid])
    right, inv_right = merge_sort(arr[mid:])
    merged, inv_merge = merge(left, right)
    total_inversions = inv_left + inv_right + inv_merge
    return merged, total_inversions

def merge(left, right):
    merged = []
    i = j = inv_count = 0

    while i < len(left) and j < len(right):
        if left[i] <= right[j]:
            merged.append(left[i])
            i += 1
        else:
            merged.append(right[j])
            j += 1
            inv_count += len(left) - i

    merged += left[i:]
    merged += right[j:]
    return merged, inv_count

if __name__ == '__main__':
    test_data = [3, 1, 2, 4, 5]
    sorted_data, inversion_count = merge_sort(test_data)
    print("Sorted array:", sorted_data)
    print("Number of inversions:", inversion_count)