Полювання на баги#5833

Полювання на баги

5 секунд
64 мегабайти
Легка

У цій задачі ми розглядаємо просту мову програмування, яка підтримує лише оголошення одновимірних масивів цілих чисел та оператори присвоєння. Ваше завдання — знайти помилку в даній програмі.

Синтаксис цієї мови описується за допомогою BNF наступним чином:

де позначає символ нового рядка (LF).

Символи, що використовуються в програмі, включають алфавітні літери, десяткові цифри, =, [, ] та символи нового рядка. Жодні інші символи не з'являються в програмі.

Оголошення визначає масив і вказує його довжину. Допустимі індекси масиву довжини — це цілі числа від до n-1, включно. Зверніть увагу, що імена масивів чутливі до регістру, тобто масив a і масив A — це різні масиви. Початкове значення кожного елемента в оголошеному масиві не визначено.

Наприклад, масив a довжини і масив b довжини оголошуються відповідно наступним чином:

a[10]

b[5]

Вираз обчислюється до невід'ємного цілого числа. Конструкція <number> інтерпретується як десяткове ціле число. Конструкція <array_name>[<expression>] обчислюється до значення елемента масиву <array_name> з індексом <expression>. Присвоєння присвоює значення, позначене правою частиною, елементу масиву, вказаному лівою частиною.

Приклади присвоєнь такі:

a[0]=3

a[1]=0

a[2]=a[a[1]]

a[a[0]]=a[1]

Програма виконується з першого рядка, рядок за рядком. Ви можете припустити, що масив оголошується один раз і тільки один раз перед тим, як будь-який з його елементів буде використано.

Дано програму, вам потрібно знайти наступні помилки:

Ви можете припустити, що інші помилки, такі як синтаксичні помилки, не з'являються. Ви також можете припустити, що цілі числа, представлені <number>, знаходяться в діапазоні від до 2^{31}-1 (= ), включно.

Вхідні дані

Вхід складається з кількох наборів даних, за якими слідує рядок, що містить лише один . (крапка). Кожен набір даних складається з програми, за якою також слідує рядок, що містить лише один . (крапка). Програма не перевищує рядків. Будь-який рядок не перевищує символів, виключаючи символ нового рядка.

Вихідні дані

Для кожної програми на вході ви повинні вказати номер рядка присвоєння, в якому з'являється перша помилка. Номери рядків починаються з для кожної програми. Якщо в програмі немає помилки, ви повинні вказати нуль. Вихід не повинен містити зайвих символів, таких як пробіли.

Приклади

Приклад 1

Loading
Loading