Polish version    English version  
  Historia OI -> XIII OI 2005/2006 -> Zadania


 Aktualności
 O olimpiadzie
 Komitety
 XVIII OI 2010/2011
 Historia OI
XVII OI 2009/2010
XVI OI 2008/2009
XV OI 2007/2008
XIV OI 2006/2007
XIII OI 2005/2006
Terminarz
Zadania
Wyniki III etapu
Wyniki II etapu
Wyniki I etapu
II Etap
III Etap
Przepisy
Dla zawodników
Przydatne zasoby
XII OI 2004/2005
XI OI 2003/2004
X OI 2002/2003
IX OI 2001/2002
VIII OI 2000/2001
VII OI 1999/2000
VI OI 1998/1999
V OI 1997/1998
IV OI 1996/1997
III OI 1995/1996
II OI 1994/1995
I OI 1993/1994
 Książeczki OI
 Reprezentacja
 Obozy Olimpiady
 Galeria zdjęć
 Ciekawe odsyłacze
 OIG LiveCD
 IV OIG 2009/2010
 Historia OIG
 SIO
 MAIN

Listonosz

Limit pamięci: 64 MB

Listonosz Bajtazar codziennie musi odwiedzić wszystkie ulice swojego rejonu i dostarczyć listy. Wszystkie ulice są jednokierunkowe i łączą (parami różne) skrzyżowania. Parę skrzyżowań mogą łączyć co najwyżej dwie ulice: jedna w jednym, a druga w drugim kierunku. Skrzyżowania są ponumerowane od 1 do .

Bajtazar rozpoczyna i kończy trasę w centrali poczty Bajtockiej, przy skrzyżowaniu nr 1. Od dawien dawna Bajtazar sam wybierał trasę, którą obchodził swój rejon, jednak ostatnio dyrekcja poczty wydała nowe rozporządzenie, ograniczające swobodę wyboru tras. Każdemu listonoszowi przydzielono pewien zestaw fragmentów trasy - zbiór sekwencji skrzyżowań. Bajtazar musi wybrać taką trasę, która:

  • prowadzi każdą ulicą dokładnie raz,
  • zawiera w sobie każdą z zadanych sekwencji (jako spójny podciąg),
  • rozpoczyna się i kończy na skrzyżowaniu nr 1.
Niestety, możliwe jest, że dyrekcja wydała rozporządzenie, dla którego nie istnieje trasa Bajtazara spełniająca wymogi, np. wymaga ono w jednej ze swoich sekwencji pójścia drogą, która nie istnieje. Pomóż Bajtazarowi i napisz program, który sprawdzi czy poprawna trasa istnieje, a jeśli tak, to wyznaczy ją.

Zadanie

Napisz program który:

  • wczyta ze standardowego wejścia opis ulic i przydzielone sekwencje,
  • sprawdzi czy Bajtazar może obejść swój rejon, tak żeby odwiedzić każdą ulicę dokładnie raz oraz spełnić wszystkie zalecenia dyrekcji,
  • wypisze na standardowe wyjście znalezioną trasę lub stwierdzi że taka trasa nie istnieje.

Wejście

W pierwszym wierszu standardowego wejścia zapisanie są dwie liczby całkowite i oddzielone pojedynczym odstępem, , , odpowiednio liczba skrzyżowań i ulic. W kolejnych wierszach znajdują się opisy ulic: dwie liczby całkowite , , oddzielone pojedynczym odstępem, , , oznaczają, że ze skrzyżowania do prowadzi (jednokierunkowa) ulica. Każda (uporządkowana) para pojawia się w danych co najwyżej raz. W kolejnym wierszu zapisana jest liczba , , oznaczająca liczbę nakazanych sekwencji. W kolejnych wierszach zapisane są opisy sekwencji. Opis sekwencji składa się z liczby , , oraz ciągu numerów skrzyżowań. Liczby w wierszu są pooddzielane pojedynczymi odstępami. Sumaryczna długość wszystkich sekwencji nie przekracza .

Wyjście

Twój program powinien wypisać w pierwszym wierszu wyjścia:

  • TAK - jeśli istnieje trasa spełniająca warunki zadania,
  • NIE - jeśli taka trasa nie istnieje.
W przypadku odpowiedzi TAK, w kolejnych wierszach należy zapisać opis znalezionej trasy. Jeśli jest wiele takich tras, można wypisać dowolną z nich. Opis powinien składać się z sekwencji skrzyżowań kolejno odwiedzanych na trasie listonosza - liczb: , każdej wypisanej w osobnym wierszu, takich że:
  • ,
  • i (dla ) są połączone ulicami,
  • każda ulica występuje na liście dokładnie raz,
  • trasa zawiera, jako spójne podciągi, wszystkie nakazane przez dyrekcję sekwencje.

Dla danych wejściowych:
6 10
1 5
1 3
4 1
6 4
3 6
3 4
4 3
5 6
6 2
2 1
4
3 1 5 6
3 3 4 3
4 4 3 6 4
3 5 6 2
poprawną odpowiedzią jest:
TAK
1
3
4
3
6
4
1
5
6
2
1



Wersja do druku