Krzysztof Diks, Marcin Kubica
Tłumaczenie


Depot


Pewna fińska firma dysponuje wielkim prostokątnym magazynem. Boki magazynu są nazwane kolejno (idąc po obwodzie): lewy, górny, prawy i dolny. Wyodrębnienie w magazynie wierszy i kolumn podzieliło go na kwadraty o identycznych wymiarach. Wiersze są ponumerowane od góry liczbami 1, 2, ... Podobnie, kolumny są ponumerowane od lewej liczbami 1, 2, ....

W magazynie przechowywane są kontenery zawierające bezwartościowe rupiecie. Kontenery mają różne numery identyfikacyjne. Każdy kontener zajmuje jeden kwadrat. Magazyn jest tak duży, że liczba kontenerów, które kiedykolwiek mogą znaleźć się w magazynie, jest mniejsza zarówno od liczby wierszy, jak i liczby kolumn. Kontenery nie są nigdy usuwane z magazynu, ale czasami do magazynu są przysyłane nowe. Wejście do magazynu znajduje się w jego górnym lewym rogu.

Magazynier rozmieścił kontenery w okolicach górnego lewego rogu w taki sposób, że potrafi je odnajdywać na podstawie ich numerów identyfikacyjnych. W tym celu stosuje następującą metodę.

Przypuśćmy, że numerem identyfikacyjnym nowo wstawianego kontenera jest k (w skrócie kontenera k). Magazynier przegląda pierwszy wiersz, rozpoczynając od lewej strony, i szuka pierwszego kontenera o numerze identyfikacyjnym większym od k. Jeśli takiego kontenera nie ma, kontener k jest umieszczany bezpośrednio za ostatnim kontenerem w tym wierszu. Jeśli taki kontener l został znaleziony, to w miejsce kontenera l wstawiany jest kontener k, a kontener l jest umieszczany w następnym wierszu za pomocą tej samej metody. Jeśli magazynier dojdzie do wiersza bez kontenerów, to nowy kontener jest umieszczany w pierwszym (z lewej strony) kwadracie tego wiersza.

Załóżmy, że do magazynu trafiły kontenery 3,4,9,2,5,1 w tej właśnie kolejności. Wówczas rozmieszczenie tych kontenerów w magazynie jest następujące:


1 4 5
2 9
3

Do magazynu przyszedł Pan Kierownik i przeprowadził z magazynierem następującą rozmowę:

begin(tabular)(p(1cm...

Pan Kierownik nie chciał wyjść na głupka, więc poszedł sobie. Pomóż Panu Kierownikowi i napisz program, który mając dane rozmieszczenie kontenerów w magazynie obliczy wszystkie możliwe kolejności, w których mogły one przybyć do magazynu.

WEJŚCIE

Plik wejściowy nazywa się depot.in. Pierwszy wiersz zawiera jedną liczbę całkowitą R - liczbę wierszy zawierających co najmniej po jednym kontenerze. Kolejne R wierszy w pliku wejściowym zawiera informacje o wierszach 1,... , R, poczynając od góry. Na początku każdego z tych wierszy jest zapisana liczba całkowita M - liczba kontenerów w tym wierszu. Następnie zapisanych jest M liczb całkowitych - numery identyfikacyjne kontenerów umieszczonych w tym wierszu, poczynając od lewej. Wszystkie numery identyfikacyjne I spełniają nierówności: 1 le I le 50. Dla liczby kontenerów N w magazynie zachodzi 1 le N le 13.

WYJŚCIE

Plik wyjściowy nazywa się depot.out. Liczba wierszy w pliku wyjściowym jest równa liczbie możliwych kolejności przybycia kontenerów do magazynu. Każdy z tych wierszy zawiera N liczb całkowitych - numery identyfikacyjne kontenerów w potencjalnej kolejności ich przybycia do magazynu. Różne wiersze powinny opisywać różne kolejności.

PRZYKŁAD

Przykład 1:

begin(tabular)(ll) 
...

Przykład 2:

begin(tabular)(ll) 
...

PUNKTACJA

Jeśli plik wyjściowy zawiera niepoprawną kolejność, lub nie zawiera żadnych kolejności, to Twój program dostanie 0 punktów za taki test. W przeciwnym razie punkty za test są przyznawane w następujący sposób. Jeśli plik wyjściowy zawiera wszystkie możliwe kolejności bez powtórzeń, to Twój program dostanie 4 punkty. Jeśli plik wyjściowy zawiera co najmniej połowę możliwych kolejności i każdą z nich dokładnie raz, to Twój program dostanie 2 punkty. Jeśli plik wyjściowy zawiera mniej niż połowę możliwych kolejności, lub niektóre z nich się powtarzają, Twój program dostanie 1 punkt.