Отборы на IOI-2007, тур I МАДЖОНГ Входной файл: Выходной файл: mahjong.in mahjong.out Петя недавно узнал о существовании игры маджонг. Она ему показалась настолько интересной, что он играет в нее целыми днями. Для этой игры необходима прямоугольная доска размером m n полей и набор фишек разных цветов. При этом фишек каждого цвета в наборе должно быть ровно две. В начале игры фишки располагаются на доске произвольным образом. После этого за один ход разрешается снять пару фишек одного цвета, если они обе являются самыми правыми в своих горизонталях, либо самыми левыми в своих горизонталях, либо самыми нижними в своих вертикалях, либо самыми верхними в своих вертикалях. Если соответствующей пары фишек нет, то игра закончена. Например, на рисунке показан пример позиции в игре, когда можно сделать два хода: снять две фишки четвертого цвета, поскольку они являются самыми левыми в своих горизонталях, либо снять две фишки первого цвета, поскольку они являются самыми верхними в своих вертикалях. 5 4 2 1 3 3 5 4 1 2 Цель игры состоит в том, чтобы сделать как можно больше ходов. Задана начальная расстановка фишек на доске. Требуется найти самую длинную последовательность ходов, которую может сделать Петя из заданной позиции. Формат входных данных: первая строка входного файла содержит размеры доски: два целых числа m и n (1 ≤ m, n ≤ 300, хотя бы одно из этих чисел четно). Далее следуют m строк по n чисел в каждой, j-е число в i-й из этих строк представляет собой номер цвета j-й слева фишки в i-й горизонтали. Цвета пронумерованы натуральными числами от 1 до nm / 2. На доске ровно две фишки каждого цвета. Формат выходных данных: в первой строке выходного файла выведите k — максимальное количество ходов, которое может сделать Петя из заданной начальной позиции. Во второй строке выходного файла выведите разделенные пробелами k чисел — номера цветов фишек в том порядке, в котором они должны сниматься с доски. Если возможных ответов несколько, выведите любой. Примеры входных и выходных данных: mahjong.in 3 4 1 2 3 4 1 2 3 4 5 5 6 6 4 4 4 1 3 6 5 2 5 2 1 7 3 8 4 6 7 8 mahjong.out 6 1 2 3 4 5 6 3 4 1 8 МОСТЫ И ТОЧКИ СОЧЛЕНЕНИЯ Входной файл: Выходной файл: bridges.in bridges.out Отборы на IOI-2007, тур I Задан связный неориентированный граф G. В графе возможно наличие нескольких ребер между одной и той же парой вершин. Найдите все мосты и все точки сочленения в графе G. Формат входных данных: первая строка входного файла содержит целое число N (1 ≤ N ≤ 10000) количество вершин графа. Вторая строка входного файла содержит целое число M (0 ≤ M ≤ 100000) - количество ребер графа. В каждой из следующих M строк содержатся ровно два числа a и b (1 ≤ a, b ≤ N). Эти числа описывают ребро, соединяющее вершины с номерами a и b. Вершины нумеруются последовательными натуральными числами от 1 до N. Формат выходных данных: первая строка выходного файла должна содержать число X - количество мостов в графе G и X чисел - номера ребер, являющихся мостами. Ребра нумеруются последовательными натуральными числами от 1 до M в порядке их появления во входном файле. Следующая строка выходного файла должна содержать число Y - количество точек сочленения в графе G и Y чисел - номера вершин, являющихся точками сочленения. Выводите номера мостов и точек сочленения в порядке возрастания. Пример входных и выходных данных: bridges.in 6 7 1 2 2 3 1 3 3 4 4 5 5 6 4 6 Bridges.out 1 4 2 3 4 РАЗБИЕНИЕ ПРЯМОУГОЛЬНИКА Входной файл: rt.in Выходной файл: rt.out Геометрическую фигуру называют выпуклой, если любой отрезок, концы которого принадлежат этой фигуре, лежит целиком в ней. Например, на приведенном рисунке (см. ниже) первая слева фигура выпуклая, а средняя и правая не являются выпуклыми (для каждой из них на примерах показан отрезок, нарушающий условие выпуклости): Напишите программу RT, которая делит составленный из NM клеток прямоугольник на K кусков так, что каждый кусок удовлетворяет следующим условиям: 1. кусок состоит из некоторого числа целых клеток, т.е. ни одна клетка не разделена между несколькими кусками; 2. кусок является 4-х связным, т.е. из каждой его клетки можно попасть в любую другую, перемещаясь из одной клетки в соседнюю через их общую сторону не выходя за пределы куска; 3. кусок не является выпуклым Отборы на IOI-2007, тур I Найденные K кусков должны полностью покрывать весь прямоугольник, при этом не должно оставаться ни одной свободной клетки Формат входных данных: первая строка текстового файла содержит числа N (1<N<101) и M (1<M<101) – количество строк и столбцов прямоугольника соответственно, разделенные пробелом. Во второй строке записано число K (1<K<=(NM)/3) - количество кусков. Формат выходных данных: в текстовый файл выведите N строк по M целых чисел 1…K в каждой так, что при соединении клеток, находящихся на позициях, указанных одним и тем же числом, получилось бы требуемое разбиение. Если возможных разбиений несколько – вывести любое из них. Условимся считать, что каждый из тестов содержит, как минимум, одно некоторое разбиение Пример входных и выходных данных: rt.in 4 5 3 rt.out 1 1 1 1 1 2 2 2 2 2 2 2 3 3 3 3 1 2 3 3