From 9a38d895f086a04549db20f7d30fee0bb9c4a5bf Mon Sep 17 00:00:00 2001 From: Fedor Lyanguzov Date: Sun, 3 Dec 2023 16:24:59 +0300 Subject: [PATCH] 02.1, 02.2, 03.1, 03.2 --- 02/02.py | 25 +++++++++ 02/input.txt | 100 ++++++++++++++++++++++++++++++++++++ 03/03.py | 39 ++++++++++++++ 03/input.txt | 140 +++++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 304 insertions(+) create mode 100644 02/02.py create mode 100644 02/input.txt create mode 100644 03/03.py create mode 100644 03/input.txt diff --git a/02/02.py b/02/02.py new file mode 100644 index 0000000..508981d --- /dev/null +++ b/02/02.py @@ -0,0 +1,25 @@ + + +inp = open('input.txt').read().strip().split('\n') + +def f(line): + i, rounds = line.split(': ') + i = int(i[5:]) + rounds = [[(int(y[0]), y[1]) for x in r.split(', ') if (y:=x.split(' '))] for r in rounds.split('; ')] + return i, rounds +req = {'red': 12, 'green': 13, 'blue': 14} + +print(sum(i for i, rounds in map(f, inp) if all(a<=req[b] for r in rounds for a, b in r))) + +from functools import reduce +from math import prod + +def cubes_power(d): + return prod(d.values()) + +def max_dict(a, b): + return {k: max(a.get(k,0), b.get(k,0)) for k in a.keys() | b.keys()} + +print(sum(cubes_power( + reduce(max_dict, map(lambda x: dict((b, a) for a, b in x), rounds)) + ) for _, rounds in map(f, inp))) diff --git a/02/input.txt b/02/input.txt new file mode 100644 index 0000000..0bb1d4b --- /dev/null +++ b/02/input.txt @@ -0,0 +1,100 @@ +Game 1: 8 green, 4 red, 4 blue; 1 green, 6 red, 4 blue; 7 red, 4 green, 1 blue; 2 blue, 8 red, 8 green +Game 2: 11 green, 7 blue, 15 red; 13 red, 6 green, 2 blue; 7 green, 9 red, 10 blue; 5 blue, 1 red, 11 green; 4 blue, 18 green; 4 red, 8 blue, 18 green +Game 3: 7 red, 10 green, 4 blue; 2 blue, 3 green, 5 red; 9 red, 7 green, 3 blue; 3 blue, 6 green, 18 red +Game 4: 1 blue, 2 green, 5 red; 10 red, 1 blue, 3 green; 14 red +Game 5: 16 red, 4 green, 19 blue; 13 blue, 9 red; 7 green, 14 red, 2 blue; 5 green, 18 blue, 4 red; 7 red, 2 blue, 3 green; 8 blue, 12 green +Game 6: 3 blue, 8 green; 4 red, 5 green; 5 red, 8 blue, 5 green; 8 blue, 4 green; 3 red, 7 green, 2 blue +Game 7: 7 red, 2 blue; 5 red, 6 green; 10 red; 2 blue, 12 red, 2 green; 4 red, 1 blue, 1 green; 9 green, 2 blue, 10 red +Game 8: 3 red, 7 green, 3 blue; 2 green, 3 blue, 3 red; 3 blue, 4 green, 1 red; 3 blue, 3 red; 2 blue, 6 green; 2 red, 7 green, 1 blue +Game 9: 5 red, 6 green; 6 red; 2 blue, 3 green, 9 red; 6 green, 2 blue +Game 10: 5 red, 8 blue, 5 green; 15 red, 6 green, 7 blue; 8 blue, 6 red, 5 green; 5 green, 2 blue; 12 red, 6 blue; 6 green, 16 red, 6 blue +Game 11: 3 red, 7 blue; 2 red, 3 blue, 6 green; 4 red, 5 green, 2 blue +Game 12: 15 green, 6 red, 2 blue; 3 red, 8 green, 9 blue; 8 blue, 2 red, 7 green; 5 red, 11 green, 6 blue +Game 13: 1 blue; 1 green, 6 red; 8 red, 3 blue; 5 blue, 8 red, 2 green +Game 14: 4 green, 1 blue; 8 blue, 5 green, 1 red; 2 green, 8 blue, 3 red +Game 15: 7 blue, 9 red, 8 green; 9 green, 12 blue, 5 red; 8 green, 10 blue, 2 red +Game 16: 1 blue, 1 red, 14 green; 6 green, 4 blue, 1 red; 16 blue, 14 green; 6 green, 2 red, 9 blue; 1 red, 1 blue; 2 red, 13 green, 7 blue +Game 17: 1 red, 9 green; 9 red, 5 blue, 2 green; 2 red, 8 green, 5 blue; 5 blue, 1 green, 3 red; 3 green, 5 blue; 3 red, 5 blue, 9 green +Game 18: 3 blue, 5 red, 3 green; 8 blue, 14 green; 3 blue, 11 red; 2 blue, 10 red, 9 green +Game 19: 7 green, 8 blue, 10 red; 1 green, 10 red, 2 blue; 6 blue, 4 red, 11 green; 7 red, 4 green; 6 blue, 4 red; 4 green, 2 red, 3 blue +Game 20: 5 red; 16 blue, 4 green, 7 red; 1 red, 1 green, 4 blue; 3 blue, 4 green, 7 red; 5 blue, 2 red, 3 green; 17 blue, 5 red +Game 21: 11 red, 4 green, 4 blue; 11 red, 5 blue, 2 green; 11 red, 13 green, 2 blue; 13 green, 6 red, 5 blue; 7 green, 4 blue, 8 red; 6 red, 8 blue, 14 green +Game 22: 2 green, 1 red, 6 blue; 3 blue, 2 green; 7 green, 10 red; 10 red, 7 blue, 5 green +Game 23: 14 green, 8 blue; 2 red, 5 green; 8 red, 16 green, 10 blue; 1 green, 7 red, 8 blue; 15 green, 5 red; 15 green, 2 red, 5 blue +Game 24: 4 blue, 1 green, 1 red; 1 blue, 8 green, 3 red; 4 red, 9 blue, 4 green +Game 25: 2 blue, 1 green, 3 red; 2 green, 4 red; 2 green, 1 blue +Game 26: 3 red, 5 green, 4 blue; 5 green, 8 blue; 1 blue, 3 green, 3 red; 7 blue, 2 red +Game 27: 13 red, 9 green, 6 blue; 19 blue, 9 red, 4 green; 14 red, 4 green, 11 blue; 5 green, 12 blue, 7 red +Game 28: 9 green, 4 blue, 15 red; 18 blue, 14 red, 12 green; 14 red, 12 blue, 3 green; 6 blue, 7 green, 15 red; 17 blue, 6 green, 9 red; 7 red, 12 green +Game 29: 17 red, 2 blue, 9 green; 5 blue, 15 red, 11 green; 13 red, 3 green, 5 blue; 4 green, 11 red, 1 blue; 5 green, 1 blue +Game 30: 3 green, 12 blue; 15 red, 2 blue, 6 green; 12 red, 11 blue, 10 green; 9 blue, 7 green, 14 red; 1 green, 7 red, 5 blue +Game 31: 6 green, 7 red, 18 blue; 2 green, 3 blue, 10 red; 9 blue, 8 red; 18 blue, 10 green, 4 red; 14 blue, 11 red, 10 green +Game 32: 7 green, 1 red, 5 blue; 5 green, 3 blue; 6 blue, 5 green; 5 red, 11 green, 6 blue +Game 33: 9 blue, 5 red; 2 blue; 6 red, 8 blue; 10 blue, 4 green, 6 red; 2 red, 4 green; 1 red, 6 blue, 2 green +Game 34: 1 red, 6 green; 3 green, 6 red, 2 blue; 2 red, 2 blue, 1 green; 5 green, 1 red, 2 blue +Game 35: 7 red, 2 green, 4 blue; 4 red, 2 green, 3 blue; 14 green, 2 blue, 5 red; 14 green, 2 red, 3 blue; 5 green, 2 red, 1 blue; 2 green, 8 red, 3 blue +Game 36: 7 green, 1 red, 1 blue; 3 blue, 6 green, 9 red; 2 blue, 17 red; 18 red, 2 green +Game 37: 6 red, 14 blue; 3 green, 2 blue; 18 blue, 6 red; 3 red, 18 blue, 3 green +Game 38: 6 blue, 8 red; 9 blue, 1 green, 1 red; 2 green, 10 blue, 1 red +Game 39: 9 red, 2 green; 7 red, 2 blue, 2 green; 2 blue, 1 red, 8 green +Game 40: 15 green, 1 blue, 1 red; 3 blue, 1 red, 6 green; 2 blue, 11 green; 2 blue, 11 green; 3 green, 4 blue, 1 red; 2 blue, 6 green +Game 41: 4 blue, 9 green; 11 green, 1 blue, 7 red; 1 red, 3 blue, 17 green; 17 green, 2 red; 2 blue, 16 green, 8 red; 1 blue, 8 green, 3 red +Game 42: 7 green, 15 blue, 2 red; 1 green, 5 blue, 5 red; 4 green, 6 red; 4 red, 4 blue, 1 green; 1 blue, 4 red +Game 43: 10 green, 6 blue, 8 red; 9 green, 9 red, 4 blue; 6 blue, 3 green, 6 red; 8 blue, 16 green, 7 red +Game 44: 14 red, 14 blue; 11 red, 1 blue; 1 green, 9 red, 15 blue; 1 green, 10 red +Game 45: 10 blue, 5 red; 1 green, 2 red, 11 blue; 2 blue, 10 red, 1 green +Game 46: 10 red, 9 green, 5 blue; 9 green, 2 red, 5 blue; 3 blue, 14 red, 4 green; 2 red, 1 green, 6 blue; 2 red, 9 blue, 4 green; 5 green, 2 blue, 11 red +Game 47: 9 red, 5 green, 1 blue; 3 red, 1 green; 8 red, 2 blue, 10 green; 9 green, 9 red, 2 blue; 13 green, 3 blue, 6 red +Game 48: 15 blue, 3 red, 8 green; 2 blue; 12 green, 7 blue, 1 red +Game 49: 9 blue, 3 red, 2 green; 12 green, 17 blue, 2 red; 3 green, 1 red, 8 blue; 16 blue, 3 green, 3 red +Game 50: 17 blue, 2 red, 14 green; 18 blue, 12 green; 13 blue, 6 red, 8 green; 4 blue, 6 red, 4 green +Game 51: 3 blue, 8 green, 4 red; 5 blue, 5 green, 4 red; 2 red, 8 blue, 2 green; 8 green, 3 blue; 9 green, 5 blue, 1 red +Game 52: 9 red, 5 green, 6 blue; 3 red, 8 green; 2 red, 3 blue, 6 green; 8 red, 4 blue, 2 green +Game 53: 6 green, 13 blue; 4 red, 7 green; 2 green, 7 red; 11 red, 2 blue; 12 blue, 9 green, 8 red +Game 54: 3 red, 3 blue, 3 green; 3 green, 2 red, 1 blue; 13 blue, 3 green; 5 red, 4 green, 13 blue; 4 green, 7 blue, 9 red +Game 55: 15 blue, 3 green, 2 red; 1 red, 8 green; 19 blue, 7 green; 4 green, 19 blue; 9 blue, 7 green, 2 red +Game 56: 1 blue, 9 green, 11 red; 3 blue, 12 green, 2 red; 1 blue, 12 green, 4 red; 16 green, 3 blue, 3 red; 18 red, 9 green +Game 57: 7 blue, 6 red, 3 green; 11 red, 5 blue, 4 green; 9 blue, 1 green, 5 red +Game 58: 17 green, 17 red, 6 blue; 10 red, 13 blue, 1 green; 7 red, 14 green; 6 red, 2 blue, 8 green; 13 red, 13 blue, 4 green +Game 59: 1 green, 4 red, 1 blue; 1 red, 1 green; 1 red; 4 blue; 6 red, 6 blue, 1 green +Game 60: 7 blue, 17 red, 8 green; 12 green, 6 red, 8 blue; 1 red, 9 blue, 12 green +Game 61: 2 green, 15 blue, 2 red; 1 green, 9 blue, 12 red; 12 red, 3 green, 19 blue +Game 62: 17 red, 1 blue; 5 green, 16 blue, 14 red; 3 red, 7 blue; 8 blue, 3 red, 1 green +Game 63: 9 red, 9 blue; 10 blue, 6 red, 9 green; 11 green, 1 blue, 13 red; 6 green, 13 blue, 9 red +Game 64: 16 blue, 2 red; 9 blue; 10 red, 1 blue, 4 green +Game 65: 1 blue, 18 green; 19 green, 1 red; 10 green, 1 blue, 1 red +Game 66: 12 blue, 5 green, 13 red; 3 green, 3 blue; 1 green, 1 blue, 11 red +Game 67: 5 red, 2 green; 7 red, 3 blue; 1 green, 8 red, 6 blue; 2 red, 5 blue; 8 red, 6 blue +Game 68: 8 green, 6 red, 18 blue; 8 green, 6 red, 3 blue; 4 red, 14 blue, 11 green +Game 69: 6 blue, 3 red, 1 green; 4 green, 6 red, 6 blue; 2 green, 13 red; 9 red, 5 blue, 6 green; 2 green, 11 red; 6 green, 2 red, 1 blue +Game 70: 7 blue, 18 green, 12 red; 17 green, 2 red, 8 blue; 17 red, 13 green, 2 blue; 1 red, 2 green, 7 blue +Game 71: 3 blue, 1 red, 15 green; 13 green, 2 red, 8 blue; 7 green, 12 blue; 7 blue, 12 green; 7 blue, 5 green +Game 72: 6 blue, 18 red; 1 blue, 4 green, 3 red; 11 red, 3 green; 6 blue, 5 red, 13 green; 11 green, 16 red, 5 blue; 3 green, 5 blue +Game 73: 18 red, 1 blue, 3 green; 4 blue, 4 red, 4 green; 1 blue, 3 red; 2 red, 1 green +Game 74: 5 red; 12 red, 4 green; 4 green, 5 red; 2 red, 1 blue, 4 green +Game 75: 2 red, 2 blue, 6 green; 2 blue, 6 green; 3 green, 1 red +Game 76: 6 green, 1 blue, 12 red; 2 green, 2 red, 3 blue; 3 green, 10 red, 3 blue; 3 blue, 16 red, 11 green; 15 red, 5 blue, 7 green; 4 green, 4 red, 3 blue +Game 77: 14 green, 4 blue, 11 red; 12 blue, 9 red, 19 green; 10 green, 4 blue +Game 78: 1 blue, 11 red; 1 blue, 14 green, 4 red; 7 green, 3 blue, 5 red +Game 79: 3 red, 13 blue; 14 blue, 5 red, 5 green; 1 green, 7 blue, 2 red; 5 green, 13 blue, 3 red; 7 blue, 5 red, 2 green +Game 80: 2 green, 11 blue; 2 red, 12 blue, 1 green; 11 blue, 11 green; 2 green, 12 blue, 1 red +Game 81: 8 blue, 5 green, 1 red; 1 red, 6 blue, 4 green; 6 green, 10 blue; 2 red, 9 blue, 2 green; 6 blue, 2 green; 6 green, 9 blue, 2 red +Game 82: 13 red, 12 green, 3 blue; 4 blue, 4 red, 1 green; 4 green, 8 red, 2 blue; 7 red, 13 green +Game 83: 2 green, 8 red, 1 blue; 2 blue, 6 red, 8 green; 5 green, 1 blue +Game 84: 6 red, 18 blue, 5 green; 3 green, 15 blue, 2 red; 6 red, 6 blue, 8 green; 1 red, 4 blue, 2 green; 2 blue, 5 green +Game 85: 3 red, 11 green, 2 blue; 3 blue, 6 green; 2 red, 4 green, 4 blue; 1 blue, 3 red, 10 green; 4 blue, 7 green, 4 red +Game 86: 7 green, 16 blue; 4 blue, 1 green, 7 red; 6 red, 15 green, 9 blue; 7 green, 9 red, 2 blue; 14 green, 2 blue +Game 87: 8 red, 3 blue, 8 green; 3 red, 1 blue, 8 green; 6 red, 5 green; 2 red, 6 green, 2 blue; 6 green, 2 red +Game 88: 1 blue, 4 red, 12 green; 4 red, 1 blue, 14 green; 1 blue, 10 green, 4 red; 1 blue, 10 red, 9 green +Game 89: 7 green, 6 red, 10 blue; 4 red, 5 green; 2 green, 13 blue, 2 red +Game 90: 16 blue, 2 green, 10 red; 4 green, 7 red, 14 blue; 4 blue, 11 green, 3 red; 3 red, 10 blue, 3 green +Game 91: 7 green, 7 red, 4 blue; 14 red, 11 blue; 16 red, 8 green, 15 blue +Game 92: 5 blue, 12 red, 3 green; 2 blue, 8 green, 5 red; 5 blue, 10 green; 11 green, 6 red, 4 blue; 5 red, 4 green, 4 blue +Game 93: 4 blue, 3 green, 5 red; 7 red, 17 blue; 8 blue, 7 green; 17 blue, 1 green; 2 red, 6 blue, 2 green; 15 blue, 3 red, 4 green +Game 94: 9 green, 3 red, 2 blue; 3 green, 6 red; 13 green, 4 red, 2 blue; 7 green; 4 green, 7 red; 2 red, 9 green, 2 blue +Game 95: 3 green, 11 red, 5 blue; 6 blue, 8 green; 9 green, 6 blue; 6 red, 1 green +Game 96: 3 blue, 3 green, 10 red; 2 blue, 12 red; 4 red, 3 blue; 2 green, 3 red, 1 blue; 2 green, 6 blue +Game 97: 5 blue, 3 green, 2 red; 2 blue, 3 green, 5 red; 12 red, 3 blue +Game 98: 2 blue, 2 red, 9 green; 4 green, 5 blue, 1 red; 15 green, 3 red, 9 blue +Game 99: 15 red, 7 green, 11 blue; 2 blue, 12 green, 17 red; 6 red, 3 blue, 11 green; 14 red, 13 green, 5 blue +Game 100: 5 green, 17 blue, 5 red; 15 blue; 13 green, 8 red, 3 blue; 16 blue, 15 green, 8 red; 16 green, 2 blue, 3 red diff --git a/03/03.py b/03/03.py new file mode 100644 index 0000000..60895d2 --- /dev/null +++ b/03/03.py @@ -0,0 +1,39 @@ + + +inp = open('input.txt').read().strip().split('\n') + +chars = [(i, j, c) for i, line in enumerate(inp) for j, c in enumerate(line) if c!='.' and not '0'<=c<='9'] + +nums = [] +for i, line in enumerate(inp): + line = '.'+line+'.' + for j, (l, r) in enumerate(zip(line, line[1:])): + if not l.isdigit() and r.isdigit(): + s = j-1 + if l.isdigit() and not r.isdigit(): + nums.append((i, s+1, j-1-s, int(line[s+2:j+1]))) + +places = {} +for n, (i, j, l, _) in enumerate(nums): + for k in range(j, j+l): + places[(i, k)] = n + +sel = set() +neigh = {(di, dj) for di in range(-1, 2) for dj in range(-1, 2)} - {(0,0)} +for i, j, _ in chars: + for di, dj in neigh: + if (i+di, j+dj) in places: + sel.add(places[(i+di, j+dj)]) + +print(sum(nums[i][3] for i in sel)) + +from math import prod +s = 0 +for i, j, _ in filter(lambda x: x[2]=='*', chars): + sel = set() + for di, dj in neigh: + if (i+di, j+dj) in places: + sel.add(places[(i+di, j+dj)]) + if len(sel)==2: + s += prod(nums[i][3] for i in sel) +print(s) diff --git a/03/input.txt b/03/input.txt new file mode 100644 index 0000000..2f47e68 --- /dev/null +++ b/03/input.txt @@ -0,0 +1,140 @@ +..............423....688..934............970................................95.728..........896...113..................153..972............. +...122..................*.....*..........................919..509*..........&...@.........../...........................+.......*........... +....+..........259....698..373.992.52.674.........................781...22........130.584.....-...%399.......777.................266........ +......148..+....*........................*.....357.123.......................812.........*756.143...........*............................... +..691*.....700..708................-...357........*........$177......%..244.............................762.453....477-.707..-168..359*..... +.......................394.443....456......750..................71.160.....*..183.........835..74.........*.............../............129.. +....578$....................%........................362..1......*.......661....*...........=.....730......744..294..........247............ +..............415...306*....../.452.................+.....*......375.............76....186*....../...............*..........@.......-..441.. +.....*152......#........75.757.......204%..................605.............................77.......%405.......957..324...........404....... +..545.............../...........................................*....618......%...599...............................&....43.............=... +..............902...145............170..............568..741.285.592..........54./.......%.......923......522+..........*..../...128....602. +.......697.16*................322...........$............*............+339..........633.56............$..............792..751............... +.......*.........................*..752..826.......*...104..861......................................144.....883...............+..778.892... +......968..690.......#.....769#.718...*.........326..........*..............493..123..........362...........*.........757....570..@....*.... +..681.................242............806................509...307..../.....*......./.350..942...*..614@...511........+.................151.. +........*....../..256.......................235.....923....*..........28..264........*......&..316..............945....522........*823...... +.....961.136.567....................944.......*..........500..-.......................504................765$..........=.......563.......... +..................837..823......480.....627....984.#.........136....969..........-289......$757............................107........593... +.74.924....../.............+110....*...............511................+....564......................389%.....989*305....@...*.........*..... +.......+......110..735..........647....658.509*378..........-999............*....#225....937.............147.........778...868.....871..611. +.........$...........*.....3............*...........................608..842..............*.......589.......*....842...................*.... +......$.963.....634.....................569....&..........177................*..........774.........*..132.153..*.............=.......13.... +...723.........=.......@..324......455#.......417....849$.*.........*372..747.87............./358...35..*.......974..453...811...990........ +.....................174...%............949...............182....684.............414...................201.......................*...../.... +........@.......................62.....*.....-.@669.....................487......*................943.........740*...10.......298....384.... +....446.711.........20.674...........343..806.....................&.574.*........965..............*......776...........*.867................ +......*............&.......705.804.............................374....+.307............&.......683...830...*....625..530....*837...272*..... +.......791....................*.......&.................108...........................533..............*...966.*.......................515.. +............412...../................764....................658.+292.635.674..337.................98..814......263.......720*............... +..............*...469..162.....23......................*64..*...............*.............+.........*.....*552...............990......942... +790.536.......365.......*..587..=..........................313.....512....983....953.......348.....617.982.................................. +........580............227...*....673.808....66......595............./........*............................$..........21..989............... +.....#.....*.781...........688...*..../........=.........865...............316.162.440.............&......482.663....*.............529...... +...357...182.@......359=..........553.......#....33....................323.........*............702...........*....200........&.....*....... +...............733....................957.22..........815.........................57..657@..................792..........%.....678.305...... +..701..246........*238....553..107......*...................301..........649.555..............70....................610.233.&............... +....#...*..&.................$.*....$.......$......438.....*.......943......*.....&675..955*....*..........183...=....%.....595............. +......719.857...640*299............202...125...802..#...786...........*.....................277.424..........*.790./...............984...... +...@......................368.....................*...............323..587.479....553.272.................843.......518.............*....... +...382..........892...46..........359..372+.611..585...............*.......*........*...+........&.............................487...35..... +........&692.......*..*..............@.......-.......*697.......656.....155....34..681............64..641......................*............ +....495..........885..964................993......685................%........*....................../..........543.........863............. +..........*408................&....244.....*..........................893....339........................109.....................777......... +...521.985..................677......*......734........18....925#................352...843*74.......&....*.............260.......*.......... +...$........445.$..................802...................#..........=........533...@.................228..612......724....*................. +.............*..504............=.......*.....177...................502.....+..*.............395......................$.....274.....396...... +......................417....274.....61.504..*........36*..................34..801..........%............224......................*......... +......789.........139......&.....*............802........674....&..332..............675............819.............814............883..+915. +...@.....*.....-..*.....970...279.117...............984@.....878..........231*168.*..................*.........793*......................... +..33..875.....483.433....................*.........................................148.675...581*.....544.........................*537...... +......................884............671..839.....31..........685..@...899....350*...............621........*509............./.913.......... +....947......=742..........*.......................*...............712....*.......722...159............378........438.....300...........381. +...*....................548..-................*..638.....................827...........*......714/...../...867....$..................%.-.... +998.....966.693..............694...........781...........764......584...............233....58......-......*............67=........161....... +...........*.....................509..-851.........&.846..#........../...199.................*.443..658..976.130..489..................594.. +243....413.........499-...384.......*............352.+.............................752....298..*...............$..$...............577...*... +......*......................*......378.335.................*.........+...813.120.*....................654..........$........325...*...984.. +...847..496....151*...........741.......*............624.116....767.988..&.....*...87............807...*.........127....997+......621....... +........*..........227....345......*........@.....................*............699....566..604...*...760....290............................. +......526..................*..500..799...761...413*......277....101........$..........*.........342..........*.......589..997......=........ +.............+....379....549............................*............*97.647.779....$.655..975......216...............*.......51..307./496.. +...........485.......&...............................55...........509............825......+.....43.....*...554......36...678+.$............. +..........................73.....419.....314../...........311...........$....946.....272............351...*........................968../... +.....786.................*........-..824.$...478......908....*.....455.254.....*.........615....760.....60...$......&.....*562.........102.. +.......*......43.....&...808........*.............267.*...985.....*..........616.........../......*...........189....977........616......... +......45.932...*.....502..........805...943.840%...*..270......764......680......................750..415*184......................*606..... +..768....*.....941............%.......8.&..................*................248&..105..745...633...........................584..........692. +.......684............115....88...396*..................494.354...88...58.....................*.........956......809...53.......615......... +................*391.............................................$....%.....&64.............488...........$.........*.....*.......*......... +......440.459...........637...*....866...412.519.183..../.......................*82..963.........*307..=......715.408..421.292....626..*.... +.........*......$..........#...769............./..*....470.939.+......*.....257.....*.........257.....109.578..*.......................290.. +......+.......-..897...............................629.....-...834.254.798..*.......411....................*....411.......309....218........ +.......960..744..............384............................................433................$301.....848.................*.......#..144.. +..746............$....../...........38$...536.....-....@.............*..................-............................320...471..........*... +....*.............720...59......................260..852...........633.........714...510......256.173.23...850........*........#.....691.... +..294..434...264......................422../639..........378.493...........388*................-....*...*..../.141..............539......... +........../.&........790..........@....*....................*..........&............$.............16....633.....=.....................458... +..678...............&.......184....186.934..652...741%.........=887...980.425../....485.732...502...........%........745..............*..... +...*..........98.......@......*.................+...........................*...989.....$........*......838.9..........-...........464...... +.975..768....*.....*..702.....979....511$....161....645..............44.....18............721.695...348.........400......./.543*............ +........*.769....320......724......................&.....330&........*...................*...........$...188.....*.....977......618...%..... +......879.....79............*....658..............................601................701..490....#......*........478.......166.........892.. +..844.............706....472....*...........113.........-765..217........267....../.*..........648....973....285............................ +.....*.482..........*...........853....408.....*................&........*.......59.265.........................*.......364....45.......@... +..164..*...........309....472............#..478...40.......356........328....706..............$...............149.526.....%.....*.....27.... +...........................*.......&..................612...*..58.64%........*...766.......953......488............=.../.......152.......... +...*73....872.............347....27...22......552@.........559.*............435.....*679.............*...13.774......177.#250.......8*...... +977......#.........=....................=.......................56...508......................139.747.....*..*................861.....666... +..............703...102....../........&....637..448......%..951........*...175.552*235...@.....*.......486..693............................. +........944..*....@...........590..42.738...*..........861.....&....919.....*............108.837................#....963.530...831..&...251. +........#.....93.103....708................54.342....+......................496.......................&.........278.....*.....*....162...... +..........860............@.......$167..............431.683......=496....858.........422.............662.154.405..............635.%.......... +.....882/.*.............................%......611..........766.......-...*.....755..@.....................*..........608.........951....... +..........513......................274...226......*........@.......&..556.151....*.............229...681..............*.....911............. +..............445....375.....774....*...........348..............643.............302...........*........*.......-...88......*........975.... +....*664.........*...&........@.........................893..........523....13...............825.........558...733.....769...991.....*...... +.328......821....935...................&.......@...457.....*.....+..*.........=..................341..................#............384...... +.........*...........164..........251..756....23...........912.532..879..................459........*...=................................... +219.....71..821..............654.....................684........................@2....................931...........910..................... +............&...425+..-.............207........*.....%...360...........190..........69.....................43..........$.................... +.....................116....................127.214.........*..181........@..%...49*....444....57.........*.....................715......... +............$....*.............-..859.................=..248......*..........82........*.......@.......246..376.........#........*.......... +...726...898...-..772...223.712....%........%464.....342.........442..447.........461..102.....................*355...537....313..596...584. +....*.........189........@...............................................*187........*...............*....807.............+.....*........... +.....181.+..........197......530.653+.383...293.........461%.22*..............394....769..104...$.818.36.$....=.......&....860...333........ +..........827..........*................-....*..................110.883..................%.....56............111......872................... +........................8.321....-............209.....578...583.....$.....948..548#..................868*678......871....................... +......658...264...........&....105......132............./...................*..................640..................*...........714......... +.........+.*.....................................................................608..............*....963*565.....472.......93...*......... +...*717....14.......................702............604.608......................*.....12....689..599.............................423........ +999.........................764......*.......$780.....*.......+.......%........406....*...............278*........600*23.....407.....964.... +...........%....308................183................../......758..&..360..........127.#696...50........................839*.....&.....$... +......277..449....*............881.......822.....905...205.........345.......572@................../733....=..61...................796...... +.......#..........659...*.....=..........................................................................665...................292.......... +......................887.711.....560..........................11...213*434...................949....761......*856...233*996......%.965..... +.....699..../.............&....%......103...518...............................673......=.........*....@....149.............................. +............894......=......292..425.....#........@259....787..995..................927..813..326..............439.....379.547..292......... +....901............678.217......*..............................*.......289.346..875.........*.........653+......*......*....=.....$......... +......#........................56..887....&540..200...........824............&.....*.414=....629..............893..34.334................731 +...............476.......338........@..#............592..573*.....759...........598........$.........692..474.......*................304.... +..........................*..263*93...541....138......*..........*.....................260.187.......%...*.........436.................*.... +.....#..895............744.....................%.473...92........23..................$..#........853.....443......................12..339... +...284...*...59*...131...............................................=....354.792...679.....649....*.......................994...%.......... +.......267............*...............176..............=.............743.........*......631......856................166.......*............. +.....................684.................@...........773....108...........617...965....*........................958............777.....767.. +..........572................#....&.............................51........@..........190..............694..882.#......511..788.............. +...96........%.....119..4.954....81..836....@.....671....161.................*.........................#..*.......730.%...*................. +....................@.................*...68..924...........*...644.......654.842..473.....449.............936.....*......305............980 +..........188....7..........672......596.........@........473......*..................*418....&.......302.........7...621.....476...938.*... +.......@...*...........#824..*...303...........................%....486..........290..................*.....-907.....*.......*......*...686. +....869....976...478*.......56..*...........*..................415......97.@605.....................129............701....626....157........ +.....................455.......306.876......829............430..................956.15@.......302..........938.............................. +..........................43.......*..............$.......-.....998...106.......=.......486*....&.......+......................982.......... +.554......................*.......50.231.........409..............+...$.....*........72.....716.........51..445.....*284........*........350 +.........425............*.94..836......&..............#516..............775.701.....*............................744..........541......-.... +....*810..............34....................&....297..........#........*....................#.............899=..........972..........27..... +960........762.....................*........394........&355.401........347.....+853.....&...967............................*86..663......... +............*..........991......686.25.286.......&...................................653...........914........$.....580...........*......... +...#.....784......-.......*............*......498......*..........*..316........................&.&..........691.2.....*........91.......... +..791..............462....193..........8.............57.685.......90..........201............371.....242............996................579..