Осмотр
Вы ответственны за команду, которая инспектирует новый горнолыжный курорт. Курорт расположен на нескольких горах и состоит из множества склонов, которые соединяются, разветвляются и сливаются. Карта курорта представлена в виде ациклического ориентированного графа, где узлы обозначают различные точки на курорте, а рёбра — склоны между этими точками, направленные вниз.
Ваша задача — осмотреть каждый склон на курорте. Подъёмники ещё не работают, но у вас есть вертолёт. За один полёт вертолёт может доставить человека в любую точку курорта. С этой точки человек может спуститься по склонам, осматривая их по пути. Допускается осматривать один и тот же склон несколько раз, но необходимо минимизировать количество полётов вертолёта. Таким образом, вам нужно определить, как осмотреть все склоны с минимальным числом полётов.
Входные данные
Первая строка входного файла содержит одно целое число n (2 ≤ n ≤ 100) — количество точек на курорте. Следующие n строк описывают каждую точку, пронумерованную от 1 до n. Каждая строка начинается с целого числа m_i (0 ≤ m_i < n) и продолжается m_i целыми числами a_ij, разделёнными пробелами. Все a_ij различны для каждого i, и каждое a_ij (1 ≤ a_ij ≤ n, a_ij ≠ i) представляет склон, идущий вниз от точки i до точки a_ij. Каждая точка на курорте имеет как минимум один склон, соединённый с ней.
Выходные данные
В первой строке выходного файла укажите одно целое число k — минимальное количество полётов вертолёта, необходимых для осмотра всех склонов. Затем напишите k строк, описывающих маршруты осмотра для каждого полёта. Каждый маршрут должен начинаться с целого числа от 1 до n — номера точки высадки для полёта, за которым следуют номера точек, посещаемых в порядке осмотра склонов по мере спуска. Числа в строке должны быть разделены пробелами. Вы можете записывать маршруты в любом порядке.