def napoveda(): try: a, b = [int(i) - 1 for i in input().split()] # chceme indexovat od nuly, proto mínus jedna return (a, b) # a < b except EOFError: print("Ještě potřebujeme nějaké nápovědy!") def vyres(): N = int(input()) zapomenout = [[] for i in range(N)] # zapomenout[A] ... seznam nápověd, která po zmáčknutí A zapomeneme citac = [0] * N # kolik tlačítek určitě zmáčkneme před i-tým predvoj = set(range(N)) # množina tlačítek s citac[A] = 0 # na začátku tam jsou všechna tlačítka hotovy = [False] * N # zda jsme vrchol už vyřešili vyreseno = 0 # počet hotových vrcholů napoved = 0 # celkový počet dotazů while vyreseno < N: while len(predvoj) > 1: # může se provést i nula-krát A, B = napoveda() napoved += 1 if hotovy[A] or hotovy[B]: continue # tato nápověda je nám k ničemu citac[B] += 1 # připočteme jedničku za A zapomenout[A].append(B) # až zmáčkneme A, snížíme čítač v B if citac[B] == 1: # zvýšili jsme z nuly predvoj.remove(B) A = predvoj.pop() # jediný prvek předvoje for B in zapomenout[A]: citac[B] -= 1 # zapomeneme hranu if citac[B] == 0: predvoj.add(B) hotovy[A] = True vyreseno += 1 yield A # "zmáčkneme" tlačítko print("Použitých nápověd: {}".format(napoved)) # Plus jednička za indexování od jedničky print(" ".join(str(a + 1) for a in vyres()))