N = input() sousedi = [] for i in range(N) : sousedi.append([]) stupne = [0] * N listy = [] for i in range(N-1) : # strom: n vrcholů => n-1 hran radka = raw_input().split() a = int(radka[0])-1 b = int(radka[1])-1 sousedi[a].append(b) sousedi[b].append(a) for i in range(N) : stupne[i] = len(sousedi[i]) if stupne[i] == 1 : listy.append(i) aktN = N while aktN > 2 : noveListy = [] for list in listy : for sous in sousedi[list] : stupne[sous] -= 1 if stupne[sous] == 1 : noveListy.append(sous) # Prohlédněte si pozorně, co se stalo. Mazání prvku # z prostředku seznamu tu trvá lineární čas, takže sousedy neudržuju, # nestihnul bych to: fakt, že vrchol neexistuje, značim toliko # nulovým stupněm, který je mu nastaven v kroku po odtrhnutí. aktN -= len(listy) listy = noveListy # Rozmyslete si, že program za list označí # i případný jediný zbylý vrchol. for list in listy : print list+1