поиск в глубину и подобное

15 задач
Число у задачи — рейтинг сложности, слово рядом — насколько она трудна по сравнению с другими задачами такого же типа. Шкалы задач с ответом и задач с кодом между собой не сравниваются. Рядом — счётчики попыток: успешные, неуспешные.
Фермер Джон строит изгородь.

ФД начинает в позиции \((0,0)\) и делает \(N\) шагов, двигаясь каждый раз на Единицу расстояния на север, юг, восток или запад. Каждый раз, когда он делает шаг, он строит изгородь за собой. Например, если первый его шаг будет на север, он добавит сегмент изгороди от \((0,0)\) до \((0,1)\). ФД может посещать точки повторно много раз и даже может строить одни и те же отрезки изгороди много раз. Его изгородь может даже пересекать себя много раз.

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

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

ФОРМАТ ВВОДА (файл gates.in):

Первая строка ввода содержит \(N\) (\(1 \leq N \leq 1000\)). Следующая строка содержит строку длины \(N\), описывающую путь ФД. Каждый символ один из N(север), E (восток), S (юг), W (запад).

ФОРМАТ ВЫВОДА (ФАЙЛ gates.out):

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

Беси собирается в путешествие по Cowland, которая имеет \(N\) (\(2\le N\le 2\cdot 10^5\)) городов, пронумерованных от \(1\) до \(N\) и \(M\) (\(1\le M\le 4\cdot 10^5\)) односторонних дорог. \(i\)-ая дорога ведёт из города \(a_i\) в город \(b_i\) и имеет метку \(l_i\) (\(1\le a_i,b_i\le N\), \(1\le l_i\le 10^9\)).

Путешествие длины \(k\) начинается в городе \(x_0\) - это последовательность городов \(x_0, x_1, \ldots, x_k\), таких, что что существует дорога из города \(x_i\) в город \(x_{i+1}\) для всех \(0\le i < k\). Гарантируется, что не существует путешествий бесконечной длины, и что никакие две дороги не соединяют одну и ту же пару городов.

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

Выведите длину и сумму меток дорог, предпочитаемого Беси путешествия, начинающегося из каждого города.

ФОРМАТ ВВОДА (с клавиатуры):

Первая строка содержит \(N\) и \(M\).

Каждая из следующих \(M\) строк содержит три целых числа \(a_i\), \(b_i\), \(l_i\), обозначающих дорогу из \(a_i\) в \(b_i\) с меткой \(l_i\).

ФОРМАТ ВЫВОДА (на экран):

Выведите \(N\) строк. \(i\)-ая строка должна содержать два разделённых одиночным пробелом целых числа длину и сумму меток дорог предпочитаемого Бесси путешествия, начинающегося в городе \(i\).

Ферма состоит из \(N\) полей (\(1 \leq N \leq 2 \cdot 10^5\)), последовательно пронумерованных \(1 \ldots N\), и удобно соединённых множеством из \(M\) двунаправленных тропинок (\(1 \leq M \leq 2 \cdot 10^5\)). Будучи "существами привычки" коровы используют одно множество из \(N-1\) тропинок для всех своих ежедневных перемещений между полями. Они называют эти тропинки "стандартными" тропинками. Возможно добраться от любого поля до любого другого поля, используя только стандартные тропинки.

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

Помогите Беси посчитать количество хороших маршрутов, которые она может использовать.

ФОРМАТ ВВОДА (файл exercise.in):

Первая строка ввода содержит \(N\) и \(M\). Каждая из следующих \(M\) строк содержит два целых числа \(a_i\) и \(b_i\) описывающих конечные точки тропинки. Первые N-1 из них - стандартные тропинки.

ФОРМАТ ВЫВОДА (файл exercise.out):

Выведите общее количество различных маршрутов, которые Беси может использовать. Два маршрута рассматриваются как одинаковые, если они используют одно и то же множество тропинок.

Беси и её друзья придумали новую игру "Затолкай ящик вокруг амбара в правый угол не сдвигая сено".

Амбар может быть представлен прямоугольной решёткой \(N \times M\). В некоторых ячейках решётки находится сено. Беси находится в одной ячейке этой решётки, а большой деревянный ящик занимает другую. Беси и этот ящик не помещаются в одной ячейке одновременно, также они не могут заходить в ячейку с сеном.

Бесси может двигаться в 4 ортогональных направлениях (север, юг, запад, восток). пока не уткнётся в ячейку с сеном. Если она попытается войти в ячейку с ящиком, то ящик продвинется на одну ячейку в этом же направлении, если там есть свободная ячейка. Если свободной ячейки нет, Беси не может сдвинуть ящик.

Определённая ячейка решётки указана как цель. Беси должна доставить ящик в это место.

По заданному описанию амбара, включая начальную позицию ящика и коровы, а также целевую позицию ящика, определите можно ли победить в игре.

Замечание: в этой задаче можно использовать 512 Мбт оперативной памяти, в отличие от лимита по умолчанию в 256 Мбт.

ФОРМАТ ВВОДА (файл pushabox.in):

Первая строка ввода содержит три числа \(N\), \(M\), \(Q\), где \(N\) - количество строк, \(M\) - количество столбцов.

  • \(1 \le N,M \le 1500\).
  • \(1 \le Q \le 50,000\).

Следующие \(N\) строк описывают решётку, где символ '.' показывает пустую ячейку, '#' - ячейку с сеном, 'A' - стартовую позицию Беси, 'B' - начальное положение ящика.

Далее следуют \(Q\) строк, каждая из которых содержит пару чисел \((R, C)\). Для каждой пары Вы должны определить, возможно ли доставить ящик в эту ячейку, со строкой \(R\), столбцом \(C\), из начального состояния амбара. Верхняя строка имеет номер 1, левый столбец имеет номер 1.

ФОРМАТ ВЫВОДА (файл pushabox.out):

\(Q\) строк, каждая содержит одну из строк "YES" или "NO".

Googol#89956
Коровы вознамерились разработать собственной поисковик. К несчастью, они не имели опыта разработки больших программных продуктов и потому количество сотрудников их проекта \(N\) (\(1 \le N \le 10^{100}\)) стало существенно больше, чем изначально планировалось. Для того, чтобы найти подходящее имя для своей компании, они решили оттолкнуться от верхней границы количества сотрудников своей компании и назвались "Googol", что является названием числа \(10^{100}\).

В попытке улучшить управленческую структуру в компании, коровы структурировали её в виде двоичного дерева, где каждый сотрудник отвечает за управление своим двумя непосредственными подчинёнными " левым " и " правым ". Кроме того, для того чтобы сбалансировать нагрузку на каждого работника, коровы организовали структуру дерева так, чтобы для каждого сотрудника E, общее количество сотрудников в левом поддереве E было равно или больше чем количество сотрудников в правом поддереве.

Каждый сотрудник имеет уникальной ID - число в диапазоне \(1\ldots N\), с корнем дерева - сотрудником номер 1. Вы можете интерактивно запрашивать у сотрудника ID двух его подчинённых. Это делается выводом ID этого сотрудника в стандартный вывод, за которым следует перевод строки. В ответ Вы получите одну строку, которая содержит два целых числа - ID левого и правого подчинённых данного сотрудника. Оба этих числа могут быть равны 0, если у него нет ни одного подчинённого. Или только второе число может быть 0, если у него нет правого подчинённого. (Заметим, в что в соответствии с правилом балансирования, левое поддерево всегда больше или равно правом, и потому не возможна ситуация, когда у сотрудника есть правый подчинённый, но нет левого подчинённого).

К несчастью, коровы потеряли точное значение \(N\) Пожалуйста, вычислите это число и выведите "Answer N", а за ним перевод строки как последнюю строку вашего вывода. Ваша программа имеет право сделать не более 70,000 запросов и не может выполняться боле 4 секунд (8 для Java и Python).

Далее приведен пример возможного взаимодействия между Вашей программой и грейдером (оценивающей программой).

YOUR PROGRAM: 1
GRADER: 4 3
YOUR PROGRAM: 4
GRADER: 2 0
YOUR PROGRAM: 3
GRADER: 0 0
YOUR PROGRAM: Answer 4

Дерево, соответствующее этому взаимодействию

     1
   4   3
 2

Заметим, что нет необходимости спрашивать о детях для узла 2, поскольку мы можем логически вывести, что у него нет детей из того факта, что у вершины 4 нет правого потомка.


У Фермера Джона имеется N (1 <= N <= 50,000) пастбищ, последовательно пронумерованных от 1 до N, соединённых M (1 <= M <= 100,000) двунаправленными дорогами. Дорога I соединяет пастбища Ai (1 <= Ai <= N) и Bi (1 <= Bi <= N), Ai != Bi. Возможны две дороги соединяющие одну и ту же пару пастбищ.
Беси хочет украсить пастбища к дню рождения ФД. Она хочет разместить на каждом пастбище огромный знак содержащий либо букву ‘F’ либо букву ‘J’, но чтобы не огорчать ФД, должно быть выполнено правило, Пастбища декорируются разными знаками, если они соединены дорогой.
Компания, изготавливающая знаки, требует больше денег за знак ‘F’ и меньше денег за знак ‘J’, поэтому Беси хочет максимизировать количество знаков ‘J’, которые она использует. Пожалуйста, определите это число или выведите -1, если невозможно расставить знаки по описанным правилам.
uses. Please determine this number, or output -1 if there is no valid way to arrange the signs.
PROBLEM NAME: decorate
Формат ввода:
* Строка 1: Два целых числа N и M.
* Строки 2..M+1: Два целых числа, Ai и Bi указывающих наличие двунаправленной дороги между пастбищами Ai и Bi.
Примечание
Пастбища и дороги представляют собой вершины и стороны квадрата.
Формат вывода:
* Строка 1: Одно целое число, указывающее максимальное количество знаков ‘J’ которые сможет использовать Беси. Если нет решения, то выводить -1.
Примечание
Беси может пометить пастбища 1 и 3 знаком ‘J’ (или альтернативно - пастбища 2 и 4).
Problem 1: Mirror Field [Mark Gordon]
Фермер Джон оставил несколько старых зеркал во дворе и коровы их украли. Коровы установили эти зеркала на прямоугольном поле из N*M квадратов (1<=N,M<=1000) . В каждом квадрате они разместили двустороннее зеркало между двумя противоположными углами. Такие две возможные конфигурации представлены символами ‘/’ (зеркало, соединяющее левый нижний угол с правым верхним углом) и символом ‘\’ (зеркало, соединяющее левый верхний угол с правым нижним углом).
Однажды Беси пришла с лазером к этому полю. Она пускает луч света горизонтально или вертикально или в строку или в столбец поля, который отражается от некоторого количества зеркал. Поскольку все зеркала ориентированы диагонально, то горизонтальный луч света, отразившись от зеркала, продолжает движение вертикально, и наоборот.
Беси интересно каково максимальное количество зеркал, от которых может отразится её лазерный луч отправленный из одной позиции. Помогите ей вычислить это число.
PROBLEM NAME: mirror
Формат входных данных
* Строка 1: Целые числа N и M, разделённые одним пробелом.
* Строки 2..1+N: Каждая содержит M символов '/' или '\', описывающих одну строку зеркального поля.
Формат выходных данных
* Строка 1: Одно целое число, указывающее максимальное количество раз, которое может отразится луч выпущенный вертикально или горизонтально снаружи поля. Выведите -1, если он может отражаться бесконечно.
Примечание
Беси может запустить лазер сверху вниз в средней колонке и этот луч отразится 3 раза.
Mirrors#89880

Фермер Джон установил N отражающих заборов (зеркал) (1 <= N <= 200) в различных местах фермы и надеется что сможет видеть из своего дома в точке (0,0) до амбара в точке (a,b).
На 2D-карте фермы Джона забор i показывается коротким отрезком с центром в точке с целочисленными координатами (xi, yi) и повернутым на 45 градусов (либо так '/', либо так '/'). Например, забор типа '/' в позиции (3,5) может быть описан как отрезок из (2.9,4.9) в (3.1,5.1). Все центры заборов, а также амбар лежат в точках с целочисленными координатами в диапазоне от -1,000,000...1,000,000. Центр ни одного забора не лежит в точках (0,0) или (a,b).
ФД планирует сидеть в своем доме в позиции (0,0) и смотреть вправо (вдоль по оси X в положительном направлении). Он хочет видеть точку (a,b). Однако одно зеркало установлено неправильно (например, '\' вместо '/'). Пожалуйста, выведите индекс первого зеркала в списке ФД, повернув которое (с '/' на '\' или наоборот) ФД сможет увидеть точку (a,b).
Если ФД уже может видеть точку (a,b) не поворачивая ни одно зеркало, выведите 0. Если невозможно увидеть (a,b) после переключения ровно одного зеркала, выведите -1.
PROBLEM NAME: mirrors
Формат входных данных
* Строка 1: Три разделенных пробелом целых числа, N, a, b.
* Строки 2..1+N: Строка i+1 описывает зеркало i и содержит либо xi yi / либо xi yi \ Символ / или \ указывает ориентацию зеркала.
Формат выходных данных
* Строка 1: Индекс первого зеркала, переключение которого позволит ФД видеть точку (a,b). Если ФД уже может видеть точку (a,b) выведите 0, если переключение только одного зеркала не позволит видеть точку (a,b), выведите -1.
Примечание
Переключение зеркала в позиции (3,2) позволит ФД увидеть точку (a,b).
3 .\..... 2 //./--B 1 ...|... 0 H--/... 0123456

Коровы любят головоломки. Фермер Джон подарил Беси на день рождения новую головоломку. Она состоит из трех твердых объектов, каждый из которых состоит из склеенных вместе квадратиков размера 1 х 1. Каждый из этих объектов имеет «связную» форму в том смысле, что Вы можете перейти из одного квадратика в любой другой, двигаясь по квадратикам этого объекта в одном из четырех направлений: север, юг, запад, восток.
Объект может перемещаться последовательно скольжением на одну единицу в одном из четырех направлений: север, юг, запад, восток. Цель головоломки - переместить объекты так, чтобы они разделились – то есть, чтобы граничные квадратики отошли друг от друга. Ваша задача – по заданным трем объектам определить, можно их разделить, или нет. Конфигурация, которую разделить нельзя, называется заблокированной.

Замечание: программы, которые не делают ничего, кроме угадывания ответа, могут быть дисквалифицированы.
PROBLEM NAME: unlock
Формат входных данных
* Строка 1: Три разделенных одиночными пробелами целых числа: N1, N2, and N3, описывающих количество квадратов соответственно в фигурах 1, 2, и 3.
* Строки 2..1+N1: Каждая из этих строк описывает (x,y) координату юго-западного угла одного квадрата объекта 1. Все координаты в интервале 0..9.
* Строки 2+N1..1+N1+N2: Каждая из этих строк описывает (x,y) координату юго-западного угла одного квадрата объекта 2. Все координаты в интервале 0..9.
* Lines 2+N1+N2..1+N1+N2+N3: Каждая из этих строк описывает (x,y) координату юго-западного угла одного квадрата объекта 1. Все координаты в интервале 0..9.
Формат выходных данных
* Строка 1: Выведите 1, если объекты могут быть отделены друг от друга, и 0 в противном случае.
Problem 4: Cow Beauty Pageant (Bronze Level) [Brian Dean]
Прослышав о том, что последний писк моды – иметь коров с двумя пятнами, Фермер Джон купил себе целое стадо таких коров. Однако мода переменчива, и теперь модно иметь коров, у каждой из которых ровно одно пятно.
ФД решил сделать стадо более модным, подкрасив каждую из коров таким образом, чтобы ее два пятна слились в одно.
Корова представлена решеткой символов N*M (1 <= N,M <= 50), например, так:
................ ..XXXX....XXX... ...XXXX....XX... .XXXX......XXX.. ........XXXXX... .........XXX....
Здесь каждый символ 'X' обозначает часть пятна. Два символа 'X' принадлежат одному и тому же пятну, если они вертикально или горизонтально соседние (диагонально соседние таковыми не считаются). Таким образом, на рисунке выше представлены два пятна. Вообще все коровы ФД имеют ровно два пятна.
ФД хочет использовать как можно меньше краски, чтобы объединить два пятна в одно. В примере выше, он может сделать это, закрасив только три дополнительных клеточки (они помечены символами ‘*’ на рисунке ниже).
................ ..XXXX....XXX... ...XXXX*...XX... .XXXX..**..XXX.. ........XXXXX... .........XXX....
Помогите ФД определить минимальное количество клеток, которые нужно закрасить, чтобы объединить два пятна в одно большее.
PROBLEM NAME: pageant
Формат входных данных
* Строка 1: Два разделенных пробелом целых числа, N и M.
* Строки 2..1+N: Каждая строка содержит строку из M символов 'X' и '.', указывающих одну строку коровьей окраски.
Формат выходных данных
* Строка 1: Минимальное количество новых символов 'X', которые необходимо добавить, чтобы получилось одно пятно.
Примечание
Три дополнительных символа ‘X’ превращают два пятна в одно.
................ ..1111....222... ...1111X...22... .1111..XX..222.. ........22222... .........222....

Со стародавних времён в поморских деревнях рукодельницы вышивали жемчугом на прямоугольных полотенцах, состоящих из одинаковых клеток. Вышивка начиналась с пришивания жемчужины к полотенцу в центре одной из клеток. Чтобы пришить новую жемчужину, рукодельница делала стежок из клетки, уже содержащей жемчужину, в соседнюю с ней по горизонтали или вертикали свободную клетку. Новая жемчужина пришивалась в центре клетки на конце стежка. Этот процесс повторялся, пока не заканчивались жемчужины.

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

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

Входные данные
Первая строка входных данных содержит два целых числа \(a\) и \(b\) — размеры полотенца в клетках по горизонтали и вертикали.

Вторая строка содержит два числа \(n\) и \(q\) — количество жемчужин в узоре и количество фрагментов соответственно.

Следующие \((n - 1)\) строк содержат описания стежков. Каждый стежок имеет один из следующих видов:

  • h \(x~y\) означает, что клетки с координатами \((x, y)\) и \((x + 1, y)\) содержат жемчужины, соединённые горизонтальным стежком (\(1 \leq x \leq a - 1\); \(1 \leq y \leq b\));
  • v \(x~y\) означает, что клетки с координатами \((x, y)\) и \((x, y + 1)\) содержат жемчужины, соединённые вертикальным стежком (\(1 \leq x \leq a\); \(1 \leq y \leq b - 1\)).

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

Следующие \(q\) строк описывают фрагменты. Каждое описание содержит четыре целых числа \(x_1\), \(y_1\), \(x_2\) и \(y_2\) — координаты левой нижней и правой верхней клетки фрагмента (\(1 \leq x_1 \leq x_2 \leq a\); \(1 \leq y_1 \leq y_2 \leq b\)).

Выходные данные
Выходные данные должны содержать \(q\) строк, где \(i\)-я строка содержит количество связных частей узора в \(i\)-м фрагменте.

Замечание
Пояснение к тесту из условия.

Карту местности условно разбили на квадраты, и посчитали среднюю высоту над уровнем моря для каждого квадрата.

Когда идет дождь, вода равномерно выпадает на все квадраты. Если один из четырех соседних с данным квадратом квадратов имеет меньшую высоту над уровнем моря, то вода с текущего квадрата стекает туда (и, если есть возможность, то дальше), если же все соседние квадраты имеют большую высоту, то вода скапливается в этом квадрате.

Разрешается в некоторых квадратах построить водостоки. Когда на каком-то квадрате строят водосток, то вся вода, которая раньше скапливалась в этом квадрате, будет утекать в водосток.

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

Требуется определить, какое минимальное количество водостоков нужно построить, чтобы после дождя вся вода утекала в водостоки.

Входные данные
В первой строке записаны числа N и M, задающие размеры карты — натуральные числа, не превышающие 100. Далее идет N строк, по M чисел в каждой, задающих высоту квадратов карты над уровнем моря. Высота задается натуральным числом, не превышающим 10000. Считается, что квадраты, расположенные за пределами карты, имеют высоту 10001 (то есть вода никогда не утекает за пределы карты).

Выходные данные
Выведите минимальное количество водостоков, которое необходимо построить.
Напишите программу, выполняющую функции очень простой электронной таблицы. Она работает с таблицей из 9 строк от 1 до 9 и 26 столбцов от A до Z. Клетки таблицы обозначаются именами, составленными из кодов столбца и строки, например, B1, S8.

Каждая клетка содержит выражение. Выражения используют целые константы, ссылки на клетки, скобки, бинарные операторы +, -, * и / (целочисленное деление). Например, 567, E8/2, (3+B3)*(C4-1) являются правильными выражениями. Все операторы целочисленные. Деление на ноль даёт в результате ноль.

Если значение ячейки, на которую ссылается некоторое выражение, не определено, оно считается равным нулю. Ситуация, когда две или более ячейки зависят друг от друга, является отдельным случаем - циклической ссылкой.

Ограничения: длина выражения в одной ячейке до 255 символов, все аргументы и результаты меньше 1 000 000.

Входные данные
Первая строка содержит число выражений N. Следующие N строк имеют формат <Имя клетки>=<выражение>. Все выражения корректные, и каждая ячейка определена не более чем одним выражением.

Выходные данные
В единственной строке выводится или значение клетки A1, или число 1000000 (один миллион), если значение клетки A1 не может быть найдено из-за циклической ссылки.

Робинзон живет на острове, который представляет собой прямоугольник размером \(n \times m\) клеток.

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

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

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

Робинзон не кидает очередной орех, пока предыдущий крокодил не окажется в воде.

Требуется написать программу, определяющую максимальное количество крокодилов, которых можно прогнать, не разозлив их.

Формат входных данных
В первой строке записаны числа \(n\) и \(m\) "— размеры острова с севера на юг и с запада на восток. Последующие \(n\) строк по \(m\) символов в каждой описывают текущее расположение крокодилов на острове. Если клетка свободна, то она обозначается точкой <<.>>, а если там находится крокодил, то в ней указано направление, в котором побежит этот крокодил. Направления обозначаются буквами: <<N>> "— север, <<S>> "— юг, <<E>> "— восток, <<W>> "— запад.

Формат входных данных
Выходной файл должен содержать одно число "— максимальное количество крокодилов, которых можно прогнать, не разозлив.


Пояснение к третьему примеру

В свободное от программирования время Вася увлекается экспериментами, и его любимый — переливание воды между колбами. У него есть две колбы размером a и b миллилитров соответственно, и неограниченное количество воды. Вася может производить с ними следующие действия:
  •  Налить воду в первую колбу до края (после этого в ней будет a миллилитров воды)
  •  Полностью вылить воду из первой колбы
  •  Налить воду во вторую колбу до края (после этого в ней будет b миллилитров воды)
  •  Полностью вылить воду из второй колбы
  •  Перелить воду из первой колбы во вторую. В этом случае, если во второй колбе достаточно места, чтобы уместить всю текущую воду первой колбы, вода из первой колбы переливается полностью во вторую. Если же во второй колбе места недостаточно, вторая колба заполняется до предела (в ней после этого будет b миллилитров воды), а в первой колбе остается все остальное.
Состоянием колб Вася называет упорядоченную пару (x, y), где x — текущее количество воды в первой колбе, а y— во второй. Вася хочет изучить поставленную самим собой задачу и понять, сколько различных состояний он может получить описанными выше переливаниями.
Входные данные
В единственной строке входного  через пробел записаны два натуральных числа a и b (1 ≤ a, b ≤ 100) — емкости первой и второй колбы соответственно.
Выходные данные
В единственной строке выходного выведите одно число — число различных состояний, которое можно получить описанными в задаче переливаниями воды.
 
Ввод Вывод
2 5 14
Поделиться
Класснуть