Сортировка "пузырьком"#1094

Сортировка "пузырьком"

1 секунда
64 мегабайта
Medium

Сортировка простыми обменами, сортиро́вка пузырько́м (англ. bubble sort) — простой алгоритм сортировки. Для понимания и реализации этот алгоритм — простейший, но эффективен он лишь для небольших массивов. Алгоритм считается учебным и практически не применяется вне учебной литературы, вместо него на практике применяется сортировка вставками. Алгоритм состоит в повторяющихся проходах по сортируемому массиву. За каждый проход элементы последовательно сравниваются попарно и, если порядок в паре неверный, выполняется обмен элементов. Проходы по массиву повторяются до тех пор, пока на очередном проходе не окажется, что обмены больше не нужны, что означает — массив отсортирован. При проходе алгоритма, элемент, стоящий не на своём месте, «всплывает» до нужной позиции как пузырёк в воде, отсюда и название алгоритма.

Википедия

Пузырьковая сортировка является очень простым алгоритмом и его временная сложность составляет O(n^2). Каждый раз, проходя по всему массиву, сначала мы сравниваем соседние элементы и если есть необходимость меняем их местами. Этот процесс повторяется, пока при очередном проходе не будет ни одной замены. Предположим, что после проходов массив уже отсортирован в порядке возрастания, тогда мы говорим, что является количеством этапов сортировки для заданного массива. Ниже приведен пример. Возьмём в качестве начального массива "5 1 4 2 8" и, используя описанный алгоритм пузырьковой сортировки, отсортируем его следующим образом:

Первый проход:

( 4 2 8) ( 4 2 8), сравнили первые два элемента и поменяли их местами. (1 2 8) (1 2 8), обмен так как 5 4. (1 4 8) (1 4 8), обмен так как 5 2. (1 4 2 ) (1 4 2 ), последние два элемента уже упорядочены (8 5), обмен не требуется.

Второй проход:

( 2 5 8) ( 2 5 8). (1 5 8) (1 5 8), обмен так как 4 2. (1 2 8) (1 2 8). (1 2 4 ) (1 2 4 ).

После T = 2 проходов массив уже отсортирован, поэтому количество этапов сортировки пузырьком для данного массива равно .

Дан уже отсортированный массив из различных целых чисел. Утверждается, что он был получен после ровно проходов сортировки пузырьком. Задача: сколько исходных массивов могло быть, чтобы после ровно проходов сортировки пузырьком был получен данный отсортированный массив? Ответ может быть очень большим, поэтому выведите его по модулю .

Input

Входные данные состоят из нескольких тестов.

В первой строке задано натуральное число (T \leq 100\ 000), количество тестовых случаев.

Следующие строк содержат тестовые данные. В каждой строке два целых числа и (1 \leq N \leq 1\ 000\ 000, 0 \leq K \leq N - 1), где — размер массива, — количество проходов сортировки пузырьком.

Output

Для каждого тестового случая выведите ответ на задачу по модулю в отдельной строке.

Examples

Example 1

Loading
Loading

Note

Пусть дан массив \{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\}: после проходов пузырьковой сортировки.