Гондола Мао-Конга — популярна пам'ятка Тайбея. Це канатна дорога у формі кола з однією станцією та гондолами, пронумерованими від до . Гондоли рухаються в одному напрямку. Спочатку, після гондоли з номером повз станцію проїжджає гондола з номером ( + ) для < . Якщо = , то наступною проїжджає гондола з номером .
Іноді гондоли можуть виходити з ладу. На щастя, у нас є необмежена кількість запасних гондол, які мають номери ( + ), ( + ) і так далі. Коли гондола ламається, її замінюють запасною з найменшим номером серед тих, які ще не були використані. Нова гондола встановлюється на те ж місце, де стояла зламана. Наприклад, якщо було п'ять гондол, і одна з них зламалася, то її замінять на гондолу з номером .
Вам подобається стояти на станції і спостерігати за гондолами, що проїжджають повз. Послідовністю гондол називається послідовність з номерів гондол у порядку, в якому вони проїжджають повз станцію. Можливо, що одна або кілька гондол зламалися до того, як ви прийшли на станцію, але поки ви дивитеся на рух гондол, жодна з них не ламається.
Зверніть увагу, що одному й тому ж порядку гондол може відповідати кілька послідовностей, залежно від того, яка з гондол приїхала на станцію першою. Наприклад, якщо жодна з гондол не ламалася, то можливі послідовності гондол (, , , , ) і (, , , , ), а (, , , , ) — не є послідовністю гондол, тому що гондоли приїхали в неправильному порядку.
Якщо гондола з номером зламається, то ви зможете побачити послідовність гондол (, , , , ). Якщо після цього зламається гондола з номером , її замінять на гондолу з номером , і ви зможете побачити послідовність (, , , , ). Якщо після цього гондола з номером зламається, її замінять на гондолу з номером , і ви зможете побачити послідовність (, , , , ).

Послідовністю замін називається послідовність номерів зламаних гондол у тому порядку, в якому вони ламалися. У попередньому прикладі послідовність замін — (, , ). Вважатимемо, що послідовність замін породжує послідовність гондол , якщо після того, як гондоли ламалися і замінювалися відповідно до послідовності замін , ви можете побачити послідовність гондол .
У перших трьох підзадачах вам необхідно перевірити, чи є послідовність гондол коректною. Вам потрібно реалізувати функцію valid(, inputSeq), де
— довжина послідовності;
inputSeq — масив довжини , inputSeq[i] — елемент послідовності на місці для 0 \leq i \leq n - 1;
функція повинна повертати , якщо передана послідовність є послідовністю гондол, і в іншому випадку.

У таблиці нижче наведені приклади послідовностей, які є і не є послідовностями гондол.

У наступних трьох підзадачах ви повинні побудувати послідовність замін, яка породжує задану послідовність гондол. Ви можете побудувати будь-яку з таких послідовностей.
Вам потрібно реалізувати функцію replacement(, gondolaSeq, replacementSeq), де
— довжина послідовності;
gondolaSeq — масив довжини . Гарантовано, що gondolaSeq є послідовністю гондол, gondolaSeq[i] — це -ий елемент послідовності, для 0 \leq i \leq n - 1;
функція повинна повертати — довжину послідовності замін;
replacementSeq — масив, достатньо великий, щоб вмістити послідовність замін; ви повинні повернути послідовність замін, записавши її -ий елемент у replacementSeq[i] для всіх 0 \leq i \leq l - 1.


У наступних чотирьох підзадачах ви повинні визначити кількість послідовностей замін, які породжують задану послідовність (яка може бути послідовністю гондол, а може не бути) за модулем 10^9 + . Ви повинні реалізувати функцію countReplacement(, inputSeq).
— довжина переданої послідовності;
inputSeq — масив довжини , inputSeq[i] — це -ий елемент переданої послідовності, для всіх 0 \leq i \leq n - 1.
якщо передана послідовність є послідовністю гондол, ви повинні визначити кількість послідовностей замін, які породжують дану послідовність гондол, і повернути залишок від ділення цієїкількості на 10^9 + . Якщо передана послідовність не є послідовністю гондол, функція повинна повертати . Якщо передана послідовність є послідовністю гондол, але жодна гондола не зламалася, функція повинна повернути .


Перший рядок містить номер підзадачі , яку повинна вирішувати ваша програма (1 \leq t \leq 10);
Другий рядок містить довжину переданої послідовності;
Якщо дорівнює , або , то третій рядок містить gondolaSeq[0], ..., gondolaSeq[n-1]. Інакше він містить inputSeq[0], ..., inputSeq[n-1].
Для кожного питання буде виведено відповідну відповідь.
Приклад 1
Приклад 2
Приклад 3
Приклад 4
Приклад 5
Приклад 6
Приклад 7
Приклад 8
Приклад 9
Приклад 10