#!/usr/bin/python3 # Autor: Jirka Setnička # 1. Načteme vstup N, M, start = map(int, input().split()) # načteme řádek, který rozdělíme a každý prvek převedeme na číslo (int) slovo = input() # slovo, které máme v grafu najít vrcholy = [] for i in range(N): radek = input().split() vrcholy.append({ 'id': i, 'znak': radek[0], # Sousedi jsou všechny zbylé prvky na řádku vyjma posledního. Rovnou je # taky převedeme na čísla (int) 'sousedi': list(map(int, radek[1:-1])) }) # 2. Budeme dělat prohledávání do hloubky pomocí rekurze. # # Definujeme si funkci, která dostane vrchol a slovo, které má z tohoto vrcholu # najít (první znak slova hledá v některém ze sousedů) a vrátí buď False, pokud # najít nelze, nebo pole čísel vrcholů, přes které je potřeba projít. def hledej(vrchol, slovo): global vrcholy # Ukončovací podmínka rekurze if len(slovo) == 0: return [vrchol['id']] znak = slovo[0] zbytek = slovo[1:] # Projdeme všechny sousedy for s in vrchol['sousedi']: if vrcholy[s]['znak'] == znak: vysledek = hledej(vrcholy[s], zbytek) if vysledek is not False: vysledek.append(vrchol['id']) return vysledek # Když nic nenajdeme, vrátíme False return False # 3. Zahájíme prohledávání z prvního vrcholu (kde rovnou odsekneme první # písmeno, protože víme, že tady je) vysledek = hledej(vrcholy[start], slovo[1:]) # 4. Vypíšeme výstup - akorát nám rekurze vrátila čísla vrcholů v opačném # pořadí, takže je otočíme for v in reversed(vysledek): print(v)