BSP, czyli Bajtański System Plików

Bajtocja postanowiła skorzystać z dobrodziejstw Wolnego Oprogramowania. Ponieważ jednak wymagania tamtejszych informatyków są bardzo wysokie istniejący system Bajnux został zmodyfikowany. Jednym ze zmienionych elementów był system plików - stworzono całkiem nowy i funkcjonalny system plików BFS.

Niestety okazało się, że na bardzo obciążonych komputerach system plików ulega dość mocnej fragmentacji. Twoim zadaniem jest napisanie programu, który przetestuje jak wiele pracy będzie potrzebnej aby zdefragmentować system plików na każdym z dysków przekazanych ci do testowania.

Ponieważ operacją najbardziej obciążającą dysk (i komputer) jest zapis, Twój program ma zliczać wyłącznie liczbę operacji zapisu na dysk. Ponieważ musisz zapewnić prawidłowe działanie systemu, jeśli podczas defragmentacji wystąpi awaria nie możesz w procesie defragmentacji używać pamięci - wszystkie dane muszą cały czas znajdować się na dysku. Jedyną dostępną dla ciebie operacją jest przepisanie zawartości bloku o pozycji A do bloku o pozycji B. Nie musisz czyścić nieużywanych bloków - system plików będzie je widział jako nieużywane i sam nadpisze zawartość w razie potrzeby. Dokonując defragmentacji, należy dążyć do tego, aby liczba operacji zapisu na dysk była minimalna. Po procesie defragmentacji pliki mają zajmować spójny, początkowy obszar dysku.

Dane wejściowe:

W pierwszej linii podana zostanie liczba zestawów danych S (1 ≤ S ≤ 100). Każdy zestaw danych opisuje jeden dysk i składa się z następujących elementów:

Każdy plik na dysku posiada unikalny numer.
Bloki w pliku mają kolejne numery - tzn. jeśli w danych pojawi się blok o numerze bloku w pliku (plik o numerze K) równym 3 to na pewno są w tym zestawie danych również bloki (o numerach bloku w pliku) 0, 1, 2 dla tego pliku K.
Po defragmentacji dysku pliki muszą być ułożone w porządku rosnącym (w oparciu o numer pliku). Bloki w obrębie pliku także muszą być ułożone w porządku rosnącym (w oparciu o numer bloku w pliku).

Dane wyjściowe:

Dla każdego zestawu danych należy wypisać następujące wyniki:

Przykładowe dane wejściowe:

2
6
4
1 0 2
2 0 1
3 0 3
4 0 0
5
4
0 0 0
1 1 0
2 1 1
3 2 0
        

Przykładowe dane wyjściowe:

1
0 0 3
4
2
0 0 0
1 1 2
2 3 3
0