| import sys | |||||
| import collections | |||||
| # build | |||||
| text = sys.stdin.read() | |||||
| directed = {} | |||||
| undirected = collections.defaultdict(set) | |||||
| for line in text.splitlines(): | |||||
| A, B = line.split(')') | |||||
| directed[B] = A | |||||
| undirected[B].add(A) | |||||
| undirected[A].add(B) | |||||
| # pop stack | |||||
| i = 0 | |||||
| for k in directed: | |||||
| while k in directed: | |||||
| k = directed[k] | |||||
| i += 1 | |||||
| print(i) | |||||
| # bfs | |||||
| hops = 0 | |||||
| seen = set() | |||||
| edge = {'YOU'} | |||||
| while 'SAN' not in edge: | |||||
| hops += 1 | |||||
| seen |= edge | |||||
| edge = {new for node in edge for new in undirected[node]} - seen | |||||
| print(hops - 2) |