Сортування бульбашкою (bubble sort) — простий алгоритм сортування. Для розуміння і реалізації цей алгоритм є одним із найпростіших, але ефективний лише для невеликих масивів. Зазвичай використовується з навчальною метою і рідко застосовується поза навчанням; на практиці частіше використовують сортування вставками. Алгоритм полягає у неодноразовому проходженні масиву. Під час кожного проходу відбувається попарне порівняння сусідніх елементів і, якщо їхній порядок помилковий, відбувається обмін. Проходи повторюються, поки не буде жодного обміну — це означає, що масив відсортовано. У процесі сортування елементи, які стоять не на своєму місці, «спливають» нагору, звідки й походить назва.
Вікіпедія
Бульбашкове сортування — дуже простий алгоритм із часом виконання O(n^2). Кожного разу проходимо масив спочатку, порівнюємо сусідні елементи й, якщо треба, міняємо їх місцями. Процес повторюємо, поки під час обходу немає жодної заміни. Припустимо, після проходів масив уже відсортовано у зростаючому порядку. Кажемо, що — це кількість проходів бульбашкового сортування цього масиву. Нижче подано приклад. Початковий масив: . Відсортуємо його цим алгоритмом так:
Перший прохід:
(5\ 1\ 4\ 2\ 8) \to (1\ 5\ 4\ 2\ 8), порівняли перші два елементи і поміняли їх місцями. (1\ 5\ 4\ 2\ 8) \to (1\ 4\ 5\ 2\ 8), обмін, бо 5 > 4. (1\ 4\ 5\ 2\ 8) \to (1\ 4\ 2\ 5\ 8), обмін, бо 5 > 2. (1\ 4\ 2\ 5\ 8) \to (1\ 4\ 2\ 5\ 8), останні два елементи вже впорядковані (8 > 5), обміну немає.
Другий прохід:
(1\ 4\ 2\ 5\ 8) \to (1\ 4\ 2\ 5\ 8). (1\ 4\ 2\ 5\ 8) \to (1\ 2\ 4\ 5\ 8), обмін, бо 4 > 2. (1\ 2\ 4\ 5\ 8) \to (1\ 2\ 4\ 5\ 8). (1\ 2\ 4\ 5\ 8) \to (1\ 2\ 4\ 5\ 8).
Після T = 2 проходів масив уже відсортовано, тому кількість проходів для цього масиву — .
Дано відсортований масив , що містить різних цілих чисел. Стверджується, що його отримано рівно після проходів бульбашкового сортування. Завдання: скільки існує початкових масивів , з яких рівно через проходів бульбашкового сортування отримаємо заданий масив? Відповідь може бути дуже великою, тож виведіть її за модулем .
Вхід складається з кількох тестів.
Перший рядок містить натуральне число (T \leq 100\ 000) — кількість тестів.
Далі йдуть рядків, у кожному рядку два цілі числа і (1 \leq N \leq 1\ 000\ 000, 0 \leq K \leq N - 1), де — розмір масиву, — кількість проходів.
Для кожного тесту виведіть відповідь за модулем у окремому рядку.
Приклад 1
Нехай задано масив \{a, b, c\} (a < b < c). Можливі початкових перестановок:
\{a, b, c\},\ \{a, c, b\},\ \{b, a, c\},\ \{b, c, a\},\ \{c, a, b\},\ \{c, b, a\},
та отримати відсортований масив можна так:
\{a, b, c\}: уже відсортовано, нічого не робимо.
\{a, c, b\},\ \{b, a, c\},\ \{c, a, b\}: після проходу бульбашкового сортування.
\{b, c, a\},\ \{c, b, a\}: після проходів.