input = open("input", 'r') d = [((p:= line.split(" "))[0], int(p[1]), p[2][2:-2]) for line in input] def drToC(dr): match dr: case "U" | "3": return 1 case "D" | "1": return -1 case "R" | "0": return 1j case "L" | "2": return -1j return 0 def fill(pos,s): q = {pos} while q: c = q.pop() if c in s: continue s.add(c) for dr in {1,-1,1j,-1j}: q.add(c+dr) def run(): cr = 0 s = {0} for dr,ln,_ in d: drC = drToC(dr) for _ in range(ln): cr = cr + drC s.add(cr) fill(-1+1j,s) return len(s) def run2(): v = [0] cr = 0 prev = 0 area = 1 for _,_,color in d: ln,dr = int(color[:-1],16), drToC(color[-1]) area += ln prev += dr * ln v.append(prev) for v1,v2 in zip(v,(v[1:] + [v[0]])): area += (v1.real * v2.imag) - (v1.imag * v2.real) return int(area // 2) print(run()) print(run2())