···11+import fileinput
22+33+44+def parse_node(nodes, i=0, part_2=False):
55+ value = 0
66+ start = i
77+ num_children, num_meta = nodes[i:i+2]
88+ child_vals = []
99+1010+ i += 2
1111+1212+ for _ in range(num_children):
1313+ j, val = parse_node(nodes, i, part_2)
1414+ child_vals.append(val)
1515+ if not part_2:
1616+ value += val
1717+ i += j
1818+1919+ for j in range(num_meta):
2020+ if part_2 and num_children > 0:
2121+ try:
2222+ value += child_vals[nodes[i] - 1]
2323+ except IndexError:
2424+ pass
2525+ else:
2626+ value += nodes[i]
2727+2828+ i += 1
2929+3030+ return i - start, value
3131+3232+3333+nodes = [int(x) for x in fileinput.input()[0].split()]
3434+3535+print "Sum of metadata entries:", parse_node(nodes)[1]
3636+print "Value of the root node:", parse_node(nodes, part_2=True)[1]