Автоматичний Перевірник Вводу
Тонни задач на програмування містять цілі числа, розділені пробілами та новими рядками у вхідних даних. Часто кількість чисел у файлі та в кожному рядку визначається самими числами.
Більш формально, ми визначаємо опис вхідних даних як послідовність тверджень таких типів:
"Перший/наступний рядок містить number невід'ємне ціле число(а), variable_1, variable_2, ..., variable_number.". Тут number — це додатне ціле число від 1 до 3, а variable — це різні імена змінних, які не з'являлися раніше в описі. Якщо number дорівнює 1, "ціле число(а)" замінюється на "ціле число", інакше на "цілі числа".
"Перший/наступний рядок містить variable цілих чисел.". Тут variable — це ім'я змінної, яке вже з'явилося в описі.
"Перший/наступний рядок містить невід'ємне ціле число variable, за яким слідують variable цілих чисел.". Тут variable — це ім'я змінної, яке не з'являлося раніше і не з'явиться пізніше в описі. Зверніть увагу, що ім'я змінної повторюється двічі в цьому твердженні.
"Перший/наступний рядок містить number ціле число(а).". Тут number — це додатне ціле число. Якщо number дорівнює 1, "ціле число(а)" замінюється на "ціле число", інакше на "цілі числа".
"Перші/наступні variable рядки містять number ціле число(а) в кожному.". Тут variable — це ім'я змінної, яке вже з'явилося в описі, а number — це додатне ціле число. Якщо number дорівнює 1, "ціле число(а)" замінюється на "ціле число", інакше на "цілі числа".
"Перші/наступні variable_1 рядки містять variable_2 цілих чисел в кожному.". Тут variable_1 і variable_2 — це (можливо, однакові) імена змінних, які вже з'явилися в описі.
"Перші/наступні variable_1 рядки містять невід'ємне ціле число variable_2, за яким слідують variable_2 цілих чисел в кожному.". Тут variable_1 — це ім'я змінної, яке вже з'явилося в описі. variable_2 — це ім'я змінної, яке не з'являлося раніше і не з'явиться пізніше в описі, і відрізняється від variable_1. Зверніть увагу, що variable_2 може мати різні значення для кожного рядка, описаного цим твердженням. Це корисно, наприклад, для перерахування кількох куп з різною кількістю предметів у кожній купі.
Кожне входження "перший/наступний" у наведених вище твердженнях повинно бути замінено на "перший" у першому твердженні опису вхідних даних і на "наступний" у всіх інших твердженнях.
Дано кілька вхідних файлів, вам потрібно перевірити, чи існує опис вхідних даних, що містить не більше 4 тверджень, яке підходить для більшості даних вхідних файлів, і виділити вхідні файли, які не відповідають цьому опису.
Вхідні дані
Перший рядок вхідного файлу містить ціле число n, 1 ≤ n ≤ 10, кількість даних вхідних файлів. Зверніть увагу, що значення слова "вхідний файл" нижче відповідає другому значенню цього терміна в цьому абзаці, а не першому.
Опис кожного даного вхідного файлу починається з рядка, що містить тире ("-"). Слідує фактичний даний вхідний файл, кожен рядок якого доповнений знаком оклику ("!") для уникнення труднощів при обробці порожніх рядків.
Після виключення знака оклику в кінці, кожен рядок кожного даного вхідного файлу буде містити від 0 до 1000 цілих чисел, кожне від -1000 до 1000, розділених одиночними пробілами. Кожен даний вхідний файл буде містити не більше 10000 рядків і не більше 100000 цілих чисел.
Вихідні дані
Якщо існує опис вхідних даних з не більше ніж 4 твердженнями, що описує всі дані вхідні файли, виведіть "All good!" (без лапок) у першому рядку вихідного файлу, за яким слідує саме опис вхідних даних, по одному твердженню на рядок. Використовуйте непорожні рядки довжиною не більше 10 малих англійських літер для позначення змінних. Якщо існує кілька можливих описів, виведіть будь-який.
Якщо існує опис вхідних даних з не більше ніж 4 твердженнями, що описує хоча б один даний вхідний файл, знайдіть будь-який такий опис, який описує найбільшу кількість даних вхідних файлів. Виведіть "Bad format: numbers." (без лапок) у першому рядку вихідного файлу, де numbers — це список номерів вхідних файлів, що не відповідають даному опису вхідних даних, розділених одиночними пробілами. Вхідні файли нумеруються від 1 до n у порядку їх надання. Потім виведіть саме опис вхідних даних.
Якщо жодне опис вхідних даних з не більше ніж 4 твердженнями не підходить ні до одного даного вхідного файлу, виведіть "FAIL." в єдиному рядку вихідного файлу.