Сортування злиттям (merge sort) — це один із класичних алгоритмів сортування. Він ділить вхідний масив навпіл, рекурсивно сортує кожну половину, а потім зливає дві відсортовані половини.
У цій задачі алгоритм сортування злиттям упорядковує масив цілих чисел за зростанням. Точна поведінка описана наступним псевдокодом:
function merge_sort(arr):
n = arr.length()
if n <= 1:
return arr
// arr індексується від 0 до n-1 включно
mid = floor(n / 2)
first_half = merge_sort(arr[0..mid-1])
second_half = merge_sort(arr[mid..n-1])
return merge(first_half, second_half)
function merge(arr1, arr2):
result = []
while arr1.length() > 0 and arr2.length() > 0:
if arr1[0] < arr2[0]:
print '1' // для відлагодження
result.append(arr1[0])
arr1.remove_first()
else:
print '2' // для відлагодження
result.append(arr2[0])
arr2.remove_first()
result.append(arr1)
result.append(arr2)
return resultДуже важлива перестановка цілих чисел від до була втрачена внаслідок збою жорсткого диска. На щастя, цю послідовність сортували за допомогою зазначеного вище алгоритму, і на іншому диску збереглася відлагоджувальна інформація, що містить лише одиниці () та двійки (). Враховуючи задану довжину послідовності і відлагоджувальну інформацію, вам потрібно відновити вихідну послідовність цілих чисел.
У першому рядку міститься число — кількість тестових випадків. Кожен тест містить два рядки. У першому рядку кожного тесту вказано довжину початкової послідовності ( ≤ ≤ ). У другому рядку наведено відлагоджувальну послідовність — рядок з та , яку утворив алгоритм сортування злиттям для початкової послідовності. Рядки відокремлюються символом "\n".
Замість виведення всієї послідовності, від вас вимагається лише обчислити і вивести її контрольну суму, яка обчислюється за наступним алгоритмом:
function checksum(arr):
result = 1
for i = 0 to arr.length() - 1:
result = (31 * result + arr[i]) mod 1000003
return resultУ першому прикладі дорівнює , і відлагоджувальна послідовність — . Початкова послідовність могла бути або . Відлагоджувальна інформація показує, що перше число менше за друге, отже послідовність — . Її контрольна сума — .
У другому прикладі дорівнює , і відлагоджувальна послідовність — . Цього разу початкова послідовність — .
У третьому прикладі дорівнює , і відлагоджувальна послідовність — . Початкова послідовність — .
Приклад 1