Клуб весёлых машинистов

В машине ABC, предоставленной на соревнованиях EACP 2008 было найдено 4 бага:

Первые три бага организаторы считают прикольными и оставляют на этих соревнованиях, последний же баг всплывает в столь неожиданных местах, что решили исправить его 10 строчками ассемблерного кода.

Также на прошлых соревнованиях было выявлена невозможность написания функции, заглядывающей как угодно далеко по стеку. Организаторы провели работу над ошибками и придумали 2 новых режима работы машины (4 и 5), в которых предоставлена возможность написания столь необходимых функций. Но новые синтаксические возможности скучны и неинтересны.

В рамках K:-)M 2009 решили испробовать забавную и одновременно безумную (с точки зрения организаторов) возможность написания функций, продвигающихся по стеку.

Рассмотрим на примере, как происходит вызов функции в 3 режиме

программа:
n = 0
m = 1 - (1 - x)
s = (s(n(1,1) + x - 1) + y) * m
print s
состояние стека перед первым вызовом s (нерекурсивным)       (3, 1, 2, 3)
состояние стека перед вторым вызовом s (первым рекурсивным)  (3, 1, 2, 3)
состояние стека перед третьим вызовом s (вторым рекурсивным) (2, 3, 1, 2, 3)
    

Расмотрим новые правила вызова функции. Введём понятие максимального погружения функции вглубь стека - число, равное количеству свободных аргументов функции. В нашем примере максимальное погружении для функции m равно 1, а для функции s - 2. Перед вызовом функции вершина стека сдвигается на минимум из максимального погружения вызываемой функции и количества переданных параметров, в стек (начиная с вершины) записываются параметры, затирая, может быть, старые значения стека. При возврате из функции при таком способе вызова функций игнорируется ошибка выталкивания из пустого стека.

Согласно новым правилам вызова функций в предыдущей программе:
  состояние стека перед первым вызовом s (нерекурсивным)          (3, 1, 2, 3)
  состояние стека перед вторым вызовом s (первым рекурсивным)     (2, 2, 3)
  состояние стека перед третьим вызовом s (вторым рекурсивным)    (1, 3) 
  состояние стека перед четвертым вызовом s (третьим рекурсивным) (0) 

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

Задачи

conn/...

Граф, заданный списками смежностей проверить на связность. Если граф связен - вернуть 1, в противном случае 0.
Параметры: 1ое число - количество вершин графа, далее списки смежности вершин. Список смежности каждой вершины заканчивается нулём. Число вершин графа не больше 1000.
5 2 4 0 1 3 0 2 4 0 1 3 0 00

palin/...

Представим параметры как текст, заданный кодами его символов. Найти в этом тексте самую длинную подстроку, являющуюся палиндромом и вернуть её длину. В тексте не больше 1000 символов. Текст оканчивается символом с кодом 0.
12 3 3 5 4 4 5 3 17 5 17 98 06

area/...

Выпуклый многоугольник задан списком его вершин, перечисленных против часовой стрелке. Определить удвоенную площать многоугольника.
Первый параметр: N - число вершин многоугольника. Затем N пар чисел - координаты вершин. N <= 1000
3 0 0 10 11 5 715

kmin/...

Задан массив целых чисел, вывести k-ый его минимальный элемент (то же, что и k-эй элемент в отсортированном по возрастанию массиве).
Первые два параметра: N и K. N - число элементов в массиве, K - порядковый номер элемента для поиска. Далее следует N параметров - элементы массива.
12 7 4 0 1 3 0 2 4 0 1 3 0 01

brackets/...

Задано скобочное выражение (выражение задается кодами символов, кроме скобок выражение может содержать и другие символы). Опеределить, корректно ли расставлены скобки. Коды скобок: '(' - 40, ')' - 41, '<' - 60, '>' - 62, '[' - 91, ']' - 93, '{' - 123, '}' - 125. Строка оканчивается символом с кодом 0.
Задача решается в 3 режиме.
40 48 43 48 41 45 49 01

pi/1

Посчитать целую часть n * π (π = 3,1492...). Гарантируется, что ответ не превосходит максимального числа в машине ABC.
3094

pal/...

Представим параметры как текст, заданный кодами его символов. Вывести 1, если текст является палиндромом и 0 во всех остальных случаях. В тексте не больше 1000 символов. Текст оканчивается символом с кодом 0.
98 17 5 17 98 01

rightΔ/6

Заданы 3 точки на плоскости, являющиеся вершинами невырожденного треугольника. Если эти точки задают прямоугольный треугольник вывести 1, иначе 0.
Параметры: 6 чисел - координаты вершин (x0, y0, x1, y1, x2, y2)
0 0 0 4 3 41

weekday/3

По дате определить день недели.
Параметры: 3 числа (y - год, m - месяц, d - день месяца; 1917 <= y <= 2009, 1 <= m <= 12, 1 <= d <= 31)
Вывести 1 число, соответствующее дню недели (0 - воскресенье, 1 - понедельник, ..., 6 - суббота)
2009 04 212

root/2

Даны 2 числа N и K (K > 0), найти максимальное целое число L - такое, что LK <= N.
100 210