| @@ -0,0 +1,31 @@ | |||
| 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) | |||