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

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

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

def merge_and_count(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_array = [3, 1, 2, 4, 5]
    sorted_array, inversion_count = merge_sort_and_count(test_array)
    print("Sorted array:", sorted_array)
    print("Number of inversions:", inversion_count)