commit 92828e627283fb28a5c720029e93f20b6683b9c0 Author: ctsk <9384305+ctsk@users.noreply.github.com> Date: Sat Dec 6 17:20:26 2025 +0100 Initial commit: Days 1 - 5 diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..289c1bf --- /dev/null +++ b/Makefile @@ -0,0 +1,12 @@ +SQL_FILES := $(wildcard *.sql) + +latest: + @FILE=$$(ls -1 *.sql | sort | tail -n 1); \ + duckdb -f "$$FILE" + +run: + @for f in $(SQL_FILES); do duckdb -f $$f; done + +format: + @for f in $(SQL_FILES); do sqlfluff format $$f --dialect duckdb; done + diff --git a/data/01.in b/data/01.in new file mode 100644 index 0000000..4e124bc --- /dev/null +++ b/data/01.in @@ -0,0 +1,4503 @@ +R48 +R2 +R29 +L38 +L3 +R50 +R21 +R29 +L26 +L44 +R1 +R11 +R5 +R36 +L43 +L5 +L15 +L45 +L38 +L34 +R14 +R34 +R50 +L28 +L8 +L24 +L50 +L22 +L10 +L45 +L8 +L41 +L23 +L7 +L3 +R50 +L31 +L43 +R17 +R39 +R31 +R45 +L42 +L26 +L27 +L43 +L40 +L33 +L19 +L24 +L74 +R3 +R56 +R98 +R43 +L32 +L42 +R16 +L64 +R22 +L64 +R64 +L67 +R67 +L65 +R47 +L82 +R69 +L69 +L50 +R86 +L27 +L28 +L51 +R70 +L48 +R94 +R54 +L27 +R54 +L27 +L81 +R33 +R48 +R22 +R94 +L75 +L69 +L53 +R70 +L89 +L51 +R51 +L30 +L53 +L17 +L82 +R54 +L39 +L99 +R66 +R2 +R29 +L31 +L84 +R33 +L35 +R59 +R24 +R3 +L15 +R315 +R18 +R2 +R80 +R88 +R12 +R53 +R94 +L49 +R63 +L61 +R5 +R995 +L61 +L38 +L68 +L52 +R67 +L33 +R87 +L2 +R27 +L727 +L77 +L23 +L80 +L20 +L15 +R76 +R940 +R39 +L95 +L99 +L77 +R82 +R6 +L57 +R20 +R80 +R66 +R94 +L13 +L47 +L54 +R54 +L811 +L942 +R93 +R95 +L87 +L74 +L74 +L22 +L754 +L70 +L54 +L31 +L912 +R43 +R2 +L34 +L789 +L17 +R80 +R958 +L45 +R45 +R11 +L912 +L115 +R29 +R70 +L650 +L26 +R93 +R17 +R83 +R35 +L85 +R88 +R309 +L71 +L5 +L71 +L17 +R39 +L99 +R77 +R15 +L85 +L69 +L69 +L92 +L3 +L97 +R27 +L337 +L12 +R75 +L88 +L57 +R73 +R78 +L89 +L91 +L79 +L53 +L42 +R27 +R464 +R427 +R785 +L8 +R21 +R49 +R89 +L59 +R90 +L296 +L94 +L854 +L21 +L84 +L64 +L25 +R75 +R50 +L77 +R69 +L85 +L84 +R874 +R274 +L64 +L84 +L53 +L51 +L78 +R35 +L4 +R78 +R59 +R99 +R12 +R23 +R80 +L14 +R86 +L62 +L10 +L76 +L8 +L85 +R69 +R87 +L84 +L603 +L79 +L57 +R64 +R36 +R263 +L27 +R73 +L22 +L188 +R14 +R46 +L23 +L38 +R38 +L39 +R239 +R31 +R69 +L57 +L80 +L94 +R22 +L91 +L27 +R7 +L27 +R79 +L32 +L875 +L459 +L16 +L34 +L16 +L34 +L75 +L6 +L85 +L60 +L65 +R21 +L96 +L9 +R37 +R72 +R23 +L23 +L795 +L310 +R50 +L32 +L913 +L52 +R76 +R81 +R66 +R29 +L21 +L73 +R94 +L29 +L48 +R77 +R2 +L2 +L21 +R87 +R99 +R71 +R64 +R93 +R7 +L57 +R79 +R995 +R83 +R19 +R40 +R41 +L652 +L93 +R32 +L39 +R32 +R46 +L832 +R6 +R6 +L6 +R41 +R59 +L747 +L376 +L9 +R27 +L95 +L77 +R77 +L48 +R811 +R37 +L83 +L17 +R65 +R352 +L849 +R95 +L63 +L85 +L79 +R42 +R22 +L95 +L5 +L63 +L88 +L39 +L10 +L18 +R18 +R54 +R54 +R92 +R26 +L62 +L98 +L166 +L741 +L306 +L29 +R17 +L41 +R13 +L1 +L68 +R56 +L22 +R78 +R44 +L81 +R97 +L169 +L47 +R15 +L33 +R502 +R52 +L12 +L27 +L15 +L503 +L79 +L38 +L62 +L29 +R92 +L63 +L9 +R12 +R97 +L52 +R452 +L214 +R52 +R84 +L80 +R27 +L93 +L97 +L992 +R69 +L56 +R45 +R76 +R33 +R35 +R946 +L279 +R63 +R881 +L60 +R60 +R70 +R30 +R31 +R55 +L223 +R60 +L2 +R246 +L472 +L16 +R644 +R47 +L858 +L63 +R54 +R85 +L40 +R52 +L122 +L78 +R540 +R7 +L47 +R14 +L11 +L3 +L460 +L44 +R2 +R50 +L48 +R62 +L62 +L73 +R73 +L60 +L40 +L84 +L473 +R85 +L41 +L79 +L108 +R40 +R91 +R543 +R81 +L781 +L74 +L286 +L555 +R50 +R2 +R17 +R53 +R89 +R23 +R107 +L68 +L32 +R65 +R35 +L36 +R913 +L597 +L80 +L34 +L66 +L96 +L526 +R32 +R15 +R75 +L70 +R21 +L45 +R1 +R93 +L45 +L56 +L99 +R84 +R60 +L44 +R44 +L9 +R65 +L80 +R80 +L18 +L82 +R71 +R29 +L183 +R83 +R22 +R78 +R779 +R21 +L38 +R82 +R88 +R68 +L64 +L214 +R74 +L96 +R21 +R68 +L95 +R6 +L7 +L93 +L24 +L94 +R41 +L254 +R51 +L2 +R82 +R64 +L87 +R21 +R2 +L31 +R84 +R347 +R86 +R72 +L58 +L37 +R84 +R57 +L23 +R94 +R19 +L94 +L982 +R86 +L4 +L46 +L54 +R66 +L59 +R83 +L80 +L98 +L62 +L23 +L40 +R882 +L50 +L540 +L22 +L29 +R94 +L58 +R36 +R47 +L37 +L6 +L46 +L7 +L877 +R80 +R246 +L972 +R72 +R385 +R515 +R96 +R86 +L23 +R41 +R81 +R21 +R16 +R65 +R958 +R50 +R9 +L969 +L48 +L26 +L22 +L35 +R6 +L706 +R43 +L79 +R50 +R199 +L13 +L23 +R19 +L196 +R47 +L504 +L24 +L919 +R611 +L11 +L59 +L66 +R341 +L16 +L155 +R99 +R80 +R11 +L98 +R414 +L31 +L69 +L97 +L54 +R908 +R68 +R54 +L30 +L302 +R61 +R46 +R77 +L38 +R199 +L23 +L20 +L227 +L14 +R23 +R79 +L99 +L62 +R190 +R131 +R179 +L6 +L694 +L63 +L14 +L97 +R67 +R342 +R765 +R217 +R83 +L79 +R39 +R240 +R57 +R934 +R691 +R33 +R28 +R47 +L14 +R42 +L44 +R49 +L754 +R94 +L33 +R275 +R95 +R824 +R90 +L53 +R948 +R42 +L13 +R362 +R80 +L80 +R84 +L73 +R8 +L6 +L89 +R61 +R50 +R94 +R71 +R150 +R72 +R49 +L9 +L41 +R79 +L28 +L3 +R81 +L50 +L72 +R85 +R4 +R57 +R26 +L16 +L67 +L34 +R17 +L183 +L17 +L72 +R72 +R78 +L78 +R28 +L411 +R485 +R15 +L59 +R42 +L18 +L11 +R29 +L63 +R94 +R69 +R91 +R9 +L62 +R42 +L41 +R1 +L99 +R59 +L132 +R48 +L516 +L872 +L82 +L946 +R46 +R92 +L722 +L16 +L48 +R33 +L21 +L393 +L71 +L3 +L34 +L63 +R54 +R46 +L95 +L20 +R15 +R561 +L36 +L76 +L18 +L49 +R18 +L58 +L74 +R37 +R95 +R76 +R24 +R905 +R960 +R43 +R14 +R78 +L709 +L899 +L45 +R53 +L34 +R76 +R231 +L73 +L867 +R21 +R46 +L68 +L47 +L285 +L865 +L365 +L70 +R14 +R86 +R50 +L57 +R51 +L89 +L7 +L817 +L778 +R47 +R368 +L82 +R33 +R58 +L77 +R440 +L26 +L53 +L82 +L692 +R35 +L22 +R78 +L978 +R523 +L966 +R22 +R32 +L63 +R52 +R99 +L49 +R150 +R71 +R29 +L16 +R16 +L150 +R28 +L78 +L45 +R8 +L63 +R39 +L71 +R78 +R54 +R31 +R83 +R90 +L22 +L67 +R34 +L42 +R94 +L96 +R95 +R35 +R665 +R48 +R352 +R55 +R584 +L896 +L586 +R43 +R512 +R57 +R32 +R99 +R22 +L2 +R918 +R46 +L21 +R337 +R912 +R47 +R287 +R67 +L113 +R31 +R98 +L292 +L87 +L55 +L42 +R46 +R909 +R79 +R13 +R1 +L1 +R68 +L85 +L66 +R53 +R30 +R906 +L6 +L348 +R92 +R59 +L20 +L30 +R99 +L83 +R31 +R17 +R14 +L31 +L25 +L109 +L66 +L22 +L6 +L72 +R285 +R61 +R54 +R558 +L58 +L32 +R84 +L52 +R66 +L40 +L45 +L33 +R22 +R27 +L29 +R32 +R36 +L67 +R98 +L260 +R18 +L30 +R811 +L52 +L769 +L11 +L65 +L9 +L69 +L37 +L94 +R60 +L78 +L82 +L552 +L48 +L461 +L31 +L88 +R92 +L14 +L72 +R74 +L2 +L59 +R53 +R95 +L29 +L58 +R53 +R47 +L107 +L93 +R84 +L441 +R49 +L50 +L45 +L4 +R807 +R89 +L2 +R94 +L881 +R184 +L47 +L17 +R80 +R13 +R49 +L2 +R54 +R92 +R94 +R61 +L50 +R19 +L31 +L799 +L51 +L70 +L79 +R485 +L76 +R91 +L46 +R577 +R4 +L29 +R453 +R9 +R82 +R50 +R41 +R97 +L11 +L94 +R80 +R6 +R48 +L48 +R17 +L36 +L933 +L91 +R94 +R57 +L982 +R55 +R62 +L62 +L64 +R43 +L491 +R37 +L60 +L65 +L248 +L52 +R41 +R11 +L52 +L48 +R40 +L92 +R896 +L512 +R845 +L871 +L58 +R22 +L60 +L22 +L81 +L57 +R98 +L13 +R880 +L27 +L461 +R88 +R80 +L20 +R57 +R28 +R9 +L21 +R96 +R30 +R28 +L4 +R47 +R5 +L89 +L74 +L39 +L69 +R28 +R41 +L223 +R81 +R42 +R23 +R77 +L16 +R16 +L95 +R27 +L32 +R99 +L70 +L977 +R48 +L613 +L88 +L142 +L282 +R51 +R74 +R87 +R33 +R85 +R95 +L21 +R50 +L40 +L89 +L797 +L46 +L57 +L601 +R1 +R36 +R64 +L43 +R11 +R98 +L66 +R3 +R97 +R76 +L81 +R82 +L87 +L90 +L48 +L7 +R55 +R19 +R41 +R941 +R54 +L55 +R60 +L33 +L727 +R918 +R82 +R672 +R28 +L59 +R79 +L263 +R65 +R4 +R74 +R159 +L22 +R78 +R98 +L13 +L544 +L97 +R57 +L16 +R856 +R91 +L23 +R76 +R797 +R89 +R114 +L7 +L84 +R91 +R848 +L35 +R2 +L88 +R933 +L2 +L58 +R85 +L887 +R67 +L72 +L93 +L76 +L24 +L415 +L63 +R7 +R588 +L82 +L45 +L90 +L1 +R56 +R14 +L31 +L77 +L60 +R60 +R39 +L656 +R56 +R93 +R7 +L32 +L68 +L94 +R274 +R20 +L30 +L70 +L91 +R2 +L164 +L307 +R12 +R55 +R93 +L12 +R1 +L715 +R26 +R90 +L52 +R344 +L882 +R10 +R57 +L67 +R609 +R43 +R48 +L29 +L974 +L5 +L92 +R6 +R2 +L340 +R732 +L21 +L66 +L91 +R5 +L90 +R6 +L11 +R6 +L66 +R828 +L22 +R22 +L234 +L61 +R90 +R43 +R62 +L135 +R11 +L71 +L35 +L70 +L19 +R70 +L51 +L9 +R428 +L418 +L858 +R282 +R70 +R110 +L31 +R58 +R63 +L95 +L32 +R864 +L422 +R76 +R34 +L5 +R93 +R5 +L17 +R478 +R26 +L50 +L50 +R83 +L76 +R5 +R24 +L636 +L60 +L198 +L942 +R35 +L45 +R74 +R936 +R60 +R11 +L68 +R41 +L244 +R39 +L33 +R93 +R601 +R38 +L28 +L60 +R203 +R24 +L441 +L52 +R88 +R28 +L51 +R151 +R56 +L56 +R15 +L94 +R106 +L14 +L39 +L74 +R509 +L36 +R31 +L4 +R18 +L18 +R63 +L12 +R49 +R25 +R16 +L53 +R12 +R210 +R21 +L31 +R21 +R37 +R13 +R319 +R10 +R42 +R45 +R13 +L5 +L95 +R53 +L761 +R8 +L78 +L115 +L7 +R42 +L99 +R57 +L40 +L14 +R36 +R18 +R652 +L11 +L41 +R16 +R292 +R92 +R10 +L71 +L39 +L94 +L6 +L61 +R61 +L7 +L4 +L65 +L57 +R33 +L33 +L45 +R74 +R98 +L76 +R682 +L60 +L40 +R47 +L37 +R76 +R14 +R43 +R4 +R471 +L42 +R26 +L686 +R11 +R967 +R47 +L441 +L488 +R88 +L7 +L93 +L11 +L74 +R85 +R20 +L27 +L956 +L37 +L69 +L88 +R8 +L91 +L49 +L10 +L96 +L45 +L53 +L7 +L18 +R90 +R28 +R41 +R59 +R725 +R975 +L85 +L13 +L91 +R89 +R44 +R68 +R59 +L88 +L87 +L37 +L40 +R281 +R141 +R22 +R37 +R65 +R35 +L211 +L56 +R67 +R499 +R1 +R380 +R40 +L8 +R588 +L64 +R66 +L802 +L125 +L45 +L30 +L90 +L22 +L88 +L27 +R39 +R2 +L57 +R77 +R66 +L36 +L25 +R92 +R69 +R65 +R21 +R83 +L431 +L266 +R75 +R43 +L140 +L43 +R40 +R477 +L56 +L86 +R18 +L52 +L207 +R59 +R99 +R42 +R524 +R682 +R645 +R8 +R48 +L93 +L55 +L30 +L70 +L70 +L30 +L30 +R742 +L79 +L233 +R75 +L39 +R64 +R70 +R40 +L26 +L45 +L39 +L55 +L42 +R19 +R88 +R90 +L57 +L43 +R35 +R28 +R13 +R83 +L43 +R93 +R87 +R4 +R74 +L59 +L15 +L33 +L67 +R825 +R91 +R921 +L87 +L73 +R98 +L75 +L58 +L120 +R78 +L12 +R12 +L25 +L75 +L85 +R72 +L87 +L17 +L277 +R80 +L85 +L1 +R477 +R27 +R91 +R68 +L41 +L924 +R49 +R53 +L9 +L391 +R78 +L532 +R46 +R15 +R28 +R37 +L57 +L315 +L25 +L8 +R49 +R8 +R11 +L86 +L10 +L139 +L95 +R71 +L26 +R90 +L447 +L92 +R99 +R14 +R86 +R83 +L44 +L419 +L780 +L74 +R634 +L429 +R50 +R42 +R37 +L93 +L625 +R126 +L8 +L19 +L59 +L22 +L147 +R47 +R48 +R5 +L53 +R687 +R13 +R45 +R26 +R29 +R49 +L61 +R351 +L24 +R85 +R444 +R656 +L13 +L41 +R54 +L87 +L43 +L61 +R58 +R231 +R735 +R67 +L20 +L280 +L61 +L65 +R987 +L50 +L252 +R877 +R359 +L95 +R14 +L92 +R7 +R715 +L644 +R65 +L74 +L959 +R53 +L85 +L57 +R757 +L45 +L959 +L96 +R73 +L473 +R345 +R73 +L39 +L179 +L668 +R46 +L30 +L63 +R10 +L25 +R30 +R468 +R35 +R96 +L99 +R7 +L63 +R73 +L17 +R85 +R15 +L51 +R18 +L67 +L852 +R3 +R499 +L50 +L83 +R583 +R429 +L25 +R96 +L123 +R776 +R45 +R2 +R201 +L34 +L18 +L34 +R63 +R712 +R46 +R96 +L363 +R78 +R23 +R30 +R26 +L45 +R19 +L15 +L85 +R558 +R42 +L72 +L539 +R603 +L92 +R90 +L172 +L34 +L88 +L97 +R1 +L57 +L13 +L72 +R42 +R30 +R15 +R85 +R69 +R97 +R4 +L76 +L61 +R72 +L35 +L72 +R83 +R45 +R44 +R66 +R5 +R94 +L60 +R91 +L63 +R12 +R4 +L549 +R10 +L10 +L31 +R7 +R924 +L9 +L21 +R13 +L83 +R99 +R120 +L1 +R182 +L259 +R59 +L637 +L63 +L36 +R952 +R43 +R55 +R86 +L97 +L79 +L505 +R181 +R483 +L43 +R7 +L47 +R884 +L25 +L93 +R45 +R83 +L73 +L21 +L942 +R342 +L55 +L54 +R53 +R56 +R7 +L530 +L19 +L58 +L38 +R755 +R48 +L53 +R88 +R32 +R24 +R85 +L41 +L76 +R54 +L19 +R304 +R28 +L104 +R389 +L76 +L80 +L62 +L58 +R90 +R676 +L66 +R98 +R15 +L66 +R623 +R39 +L72 +R90 +L39 +L288 +R93 +R7 +R43 +L743 +R91 +R9 +R33 +L17 +R53 +L2 +L565 +R16 +R82 +L62 +R54 +L692 +R89 +L10 +L71 +R504 +L7 +R95 +R80 +L56 +L224 +L297 +R97 +R32 +R846 +L65 +L13 +L3 +R3 +L48 +R176 +R972 +L59 +R59 +L93 +R79 +R30 +L2 +L14 +L320 +R20 +L72 +R61 +L4 +R82 +L93 +R726 +L89 +R560 +R29 +R79 +R72 +L165 +L36 +L7 +L32 +R89 +L4 +L96 +R749 +R51 +R903 +L10 +L71 +R96 +L18 +R774 +R75 +L77 +L72 +L82 +R82 +R99 +R31 +R70 +R88 +R12 +R50 +L90 +L99 +L64 +L69 +R915 +R57 +L37 +R37 +R68 +L53 +L915 +R27 +L58 +R302 +R8 +L73 +L6 +R814 +L73 +L41 +L54 +L13 +L190 +L83 +L42 +L18 +L566 +L234 +R307 +R97 +L19 +L75 +L10 +R66 +L66 +R87 +R13 +L97 +L91 +R66 +L78 +L3 +R570 +R38 +L621 +R23 +R67 +L50 +L48 +L3 +R627 +R68 +L568 +L15 +L685 +L34 +R99 +L27 +L38 +L25 +R957 +L38 +R79 +L790 +L507 +R24 +R155 +R45 +R2 +R51 +L71 +L19 +R37 +L33 +R80 +R53 +R90 +R59 +L49 +L238 +L962 +L987 +L11 +L2 +R19 +R26 +R58 +L54 +R90 +L82 +R61 +R4 +L61 +R239 +R32 +R68 +L39 +R39 +R5 +R95 +R109 +L609 +R239 +R762 +R89 +L590 +L95 +L99 +L8 +L998 +R217 +R183 +L92 +L416 +R8 +R282 +L53 +L133 +R704 +L97 +R97 +R63 +R35 +L511 +R213 +L68 +L32 +L3 +R3 +R39 +R88 +L27 +L88 +L63 +L191 +L171 +R42 +R823 +R66 +R21 +L728 +R37 +L48 +L60 +R38 +R22 +L63 +L2 +R45 +R20 +L47 +L68 +R19 +L34 +R30 +R91 +L43 +R75 +L90 +L62 +L20 +L294 +L57 +L87 +L6 +L33 +R6 +R20 +L47 +R65 +L718 +R80 +R20 +L887 +R22 +L35 +L98 +L2 +L57 +L43 +L10 +L90 +R87 +L87 +R95 +L822 +L52 +R35 +L80 +R824 +L28 +R2 +R26 +R90 +L90 +R69 +L269 +R79 +R21 +R55 +R77 +R51 +R73 +R64 +R80 +R75 +L19 +L29 +L379 +R52 +R22 +R19 +L41 +L51 +L57 +R8 +L76 +L626 +R2 +R64 +R36 +R16 +R27 +L21 +R16 +L69 +R80 +R46 +L809 +R9 +R175 +L989 +L781 +L472 +L983 +R98 +R13 +R91 +L63 +L19 +L91 +L1 +R20 +L665 +R72 +R736 +L33 +R97 +L78 +L46 +L20 +L56 +L7 +L536 +L57 +L5 +L554 +R17 +R91 +L57 +R16 +R40 +R44 +L92 +L24 +L744 +R68 +L65 +R24 +L659 +R322 +R90 +R88 +L16 +R69 +R4 +R90 +L56 +L891 +R55 +R87 +L72 +L96 +L687 +L21 +L62 +L93 +L16 +R38 +L513 +R56 +L3 +R27 +R73 +L73 +R275 +R70 +R73 +L59 +L71 +L862 +R74 +L823 +L16 +R16 +L981 +R26 +R1 +L23 +L982 +R78 +R90 +R14 +R334 +L59 +R82 +R26 +L21 +R38 +L5 +L95 +R541 +R16 +R39 +L74 +L22 +L13 +L64 +L458 +R35 +L86 +L14 +R96 +L64 +L31 +L53 +L2 +L46 +R43 +L87 +R9 +L705 +L44 +R42 +R42 +L740 +R53 +L19 +L27 +R33 +L68 +L46 +R514 +L38 +L62 +L64 +L70 +R34 +L597 +R97 +L14 +L68 +L30 +L11 +L377 +R518 +R36 +R57 +R55 +L5 +L61 +R387 +R2 +R211 +R39 +R61 +R94 +L66 +R72 +R63 +R40 +R97 +L555 +L49 +L5 +R951 +R58 +L91 +R91 +L48 +R960 +R18 +R70 +R65 +L65 +R966 +R5 +L71 +L62 +L39 +L295 +R10 +R86 +L83 +R83 +R42 +L42 +R20 +R80 +L39 +R2 +L3 +L145 +R85 +L64 +R64 +L17 +L58 +R75 +R23 +R58 +L81 +R14 +R86 +L47 +L742 +L11 +R48 +L448 +L660 +R58 +L85 +L13 +L65 +R25 +R70 +L730 +L80 +L20 +R673 +L74 +L60 +R17 +L56 +L11 +R11 +L458 +L42 +L634 +L86 +L485 +L95 +L26 +R27 +R89 +L8 +L82 +R95 +R85 +R7 +R8 +L295 +L54 +L51 +L48 +L30 +L42 +R325 +L779 +L21 +R7 +L42 +R33 +R30 +L28 +L61 +R45 +R4 +R412 +R2 +L21 +L49 +L14 +L18 +L34 +R96 +L321 +R59 +L58 +R6 +L834 +R804 +L71 +R67 +R920 +R881 +L66 +L49 +R33 +L640 +L818 +L75 +L96 +R85 +R11 +L44 +R508 +L5 +L839 +L68 +R94 +L46 +L37 +R45 +L925 +L83 +L52 +R652 +R64 +R236 +L6 +L894 +L53 +R69 +L16 +R7 +R1 +R63 +R29 +L78 +R67 +R11 +L94 +R294 +R346 +L74 +L29 +R431 +R726 +R37 +L661 +R27 +L892 +L411 +L2 +L98 +L79 +R7 +R94 +R467 +L11 +R22 +L41 +L72 +R20 +L94 +L313 +R51 +R78 +R771 +R86 +L75 +L59 +R48 +R67 +L90 +R29 +R690 +R130 +R57 +R13 +R610 +L6 +R65 +R756 +L83 +R17 +R86 +R467 +R64 +L610 +L554 +R44 +R48 +L54 +R76 +R78 +L10 +L12 +L15 +R69 +L63 +R15 +L86 +L19 +L79 +L79 +R33 +R16 +R98 +L58 +R954 +R27 +L81 +R50 +R5 +R852 +R83 +L72 +R88 +R716 +R23 +L63 +L92 +L71 +R45 +R854 +L16 +L12 +R80 +R41 +L35 +R53 +L73 +R99 +L34 +R69 +L37 +L63 +R47 +R90 +R430 +R84 +L54 +R7 +R28 +R73 +L805 +R565 +L938 +R740 +R249 +L21 +R21 +R484 +R23 +R744 +L25 +L542 +L34 +L66 +L19 +L27 +R13 +L6 +R37 +R523 +R579 +L90 +R90 +R17 +L61 +L45 +R81 +R81 +L73 +L31 +R831 +R83 +R17 +L38 +L62 +L614 +R66 +L381 +R81 +R846 +R15 +L69 +R85 +L26 +L3 +L30 +R50 +L98 +L22 +R19 +L21 +L28 +L70 +L54 +R54 +R678 +L94 +L92 +L692 +L57 +R57 +R42 +R58 +L92 +R58 +R34 +R43 +R57 +R24 +L24 +R22 +R11 +R67 +L79 +L49 +R628 +L4 +L96 +R33 +L664 +R23 +L49 +L643 +L40 +R17 +L60 +L76 +R59 +L90 +L10 +R991 +R9 +L16 +R220 +L17 +R22 +L9 +R79 +L17 +L98 +L12 +L63 +R11 +L737 +R37 +L82 +L18 +R41 +L41 +L568 +R68 +R11 +L58 +R524 +L58 +L74 +L91 +R46 +R29 +L29 +R66 +R2 +R34 +R84 +L86 +L361 +R61 +R711 +R9 +R81 +R470 +R7 +L78 +L962 +L93 +R55 +R877 +R423 +R86 +L73 +R44 +R75 +R43 +R81 +L969 +L87 +R32 +R35 +L133 +L34 +R554 +L54 +R33 +R24 +L831 +L126 +L23 +R83 +L96 +L64 +R543 +L10 +L15 +L7 +L11 +L4 +R58 +L196 +L51 +L7 +R65 +R665 +R70 +L97 +L3 +L73 +L27 +R57 +L57 +L20 +L80 +R66 +L82 +R90 +L658 +L32 +L59 +R75 +R25 +L471 +L3 +R98 +L49 +R371 +R99 +R30 +L26 +R626 +L4 +L18 +R64 +L746 +L96 +R381 +R51 +R153 +R15 +L33 +L85 +R1 +L2 +R59 +R92 +L32 +L379 +L42 +L70 +L49 +L60 +L92 +R7 +L39 +R389 +L7 +L236 +R43 +R78 +L643 +R33 +L33 +L15 +L373 +R42 +L39 +R85 +R7 +R93 +R75 +L618 +R43 +L93 +L7 +R573 +L73 +R33 +L24 +R91 +R2 +L299 +L54 +L49 +L36 +R36 +L93 +L7 +L42 +L14 +L76 +L468 +L58 +R72 +R7 +R79 +L52 +R267 +R585 +L28 +L72 +L3 +L97 +L41 +R91 +L50 +R80 +L625 +R720 +R25 +L439 +R89 +R51 +L1 +R78 +R588 +L66 +L98 +L120 +R18 +L29 +R83 +L51 +L62 +L77 +L564 +L51 +R32 +R19 +L39 +L802 +L59 +R72 +R228 +L89 +L774 +L36 +R91 +R36 +L62 +R79 +R164 +L9 +L49 +R53 +L47 +L57 +R49 +L49 +R9 +R23 +R198 +L30 +L8 +L70 +R17 +L41 +R102 +L523 +L677 +R49 +L49 +L137 +L16 +R66 +R91 +L82 +R44 +L11 +R45 +L90 +R99 +L9 +L45 +L43 +R14 +L84 +L16 +L26 +R198 +R39 +R64 +L78 +L10 +R87 +R98 +R22 +L20 +L986 +L33 +R52 +L58 +L75 +L160 +R60 +R565 +R35 +R48 +R82 +L130 +R40 +R60 +R81 +R94 +L4 +L62 +R187 +L97 +R6 +L753 +R48 +R1 +R99 +L13 +L87 +L19 +R1 +L99 +R417 +L49 +L451 +L61 +R484 +L76 +R57 +L61 +L10 +L87 +R54 +R30 +R52 +L6 +R24 +R282 +R761 +L25 +L737 +R19 +R82 +L82 +R35 +R64 +R1 +L87 +R87 +L683 +R50 +R794 +L526 +R2 +R23 +L60 +R25 +L25 +L39 +L76 +L11 +R23 +R69 +L8 +L358 +R31 +L29 +L262 +L5 +L7 +L44 +R986 +R661 +L18 +L13 +R98 +R2 +R57 +L54 +L948 +R45 +R86 +L33 +R58 +L11 +R750 +L92 +L90 +R232 +R166 +L821 +L11 +R66 +L31 +R31 +R552 +R62 +L14 +R93 +R543 +L1 +R54 +L81 +R131 +R36 +R25 +R97 +R949 +L448 +R88 +R14 +L48 +L83 +R740 +L9 +R67 +L65 +L64 +R63 +R88 +L19 +L37 +R859 +L21 +L71 +R23 +L77 +L3 +L927 +R72 +L73 +R85 +R68 +R38 +R94 +L425 +L75 +L25 +R17 +L889 +L3 +R6 +L22 +R5 +L43 +R83 +R71 +L14 +R43 +L29 +R60 +L2 +R42 +L8 +L92 +R634 +L819 +R303 +R50 +R32 +R49 +L9 +L80 +R529 +L5 +R4 +L38 +L50 +R11 +R298 +L9 +L115 +L2 +R17 +L72 +L474 +L8 +L192 +L69 +L379 +R26 +R68 +R98 +R2 +L52 +R59 +R593 +L83 +L43 +R26 +L54 +R15 +L61 +L89 +R83 +R12 +L6 +L268 +L1 +R46 +L95 +L884 +L57 +R59 +R263 +L29 +R66 +R95 +L255 +R98 +R255 +R7 +R51 +L14 +R86 +L63 +L360 +R74 +R652 +L665 +R98 +R41 +L68 +R33 +R605 +L60 +R97 +R93 +L466 +R66 +R655 +L32 +L23 +R481 +L76 +L5 +L12 +R3 +L698 +L78 +L546 +R63 +R968 +L56 +R56 +R53 +L56 +R56 +R30 +R88 +L38 +L33 +R17 +R30 +L47 +L98 +R652 +R46 +R68 +L62 +L22 +R16 +R3 +L15 +L10 +L78 +L657 +L88 +R645 +R21 +L545 +R88 +R27 +L91 +R63 +R37 +L36 +L58 +R115 +R65 +L86 +R84 +L98 +L76 +L7 +L574 +R38 +R38 +L131 +L87 +R27 +R3 +L717 +R28 +R80 +L8 +R526 +R59 +L18 +R46 +R84 +R13 +L6 +R75 +R19 +L985 +R61 +R26 +R15 +L98 +R83 +R78 +L1 +L3 +L33 +R96 +R49 +L38 +L54 +L72 +L34 +L88 +L363 +L34 +L64 +R661 +L629 +L71 +L21 +R21 +R45 +L45 +L21 +L79 +L84 +R12 +R572 +L849 +R25 +R32 +L183 +L95 +L18 +R31 +L643 +L80 +L203 +L17 +L1 +L458 +R64 +R29 +R54 +L86 +L34 +R62 +R22 +L52 +L645 +L54 +L121 +L80 +R47 +R53 +R54 +R746 +R38 +L38 +L3 +L10 +R13 +L88 +L15 +L59 +L38 +L88 +L12 +L57 +R857 +L707 +L98 +R5 +R476 +L569 +L858 +L49 +L33 +R97 +R55 +L70 +L23 +L99 +R73 +L20 +R16 +L36 +L59 +R54 +L55 +L40 +L660 +R47 +R53 +R832 +L1 +L29 +L414 +R944 +L50 +L65 +L75 +L93 +L49 +L79 +R887 +L74 +R74 +R92 +L13 +R826 +L13 +R90 +R56 +R54 +L230 +R28 +R43 +R11 +L861 +L91 +L709 +R609 +L24 +L879 +R3 +R13 +R587 +L366 +L34 +L569 +L42 +L89 +L84 +R53 +L369 +R45 +R55 +R7 +R79 +R16 +R98 +R430 +R588 +R82 +L32 +R32 +R96 +L155 +L45 +R70 +R23 +L76 +L79 +R29 +L38 +R98 +R177 +R46 +R61 +L7 +L90 +L67 +L64 +L76 +L54 +R213 +R38 +L9 +R61 +R948 +R796 +R84 +L11 +R31 +R35 +R324 +L55 +R68 +L96 +R52 +L40 +L28 +R769 +L29 +R30 +R71 +R724 +R86 +R60 +R74 +L63 +L663 +R94 +L22 +R409 +R715 +R85 +L697 +L258 +L45 +L8 +L92 +L40 +L212 +L843 +R92 +L96 +R22 +L23 +R35 +L35 +R21 +R69 +L37 +L32 +R87 +L28 +L380 +R31 +R69 +R96 +L96 +L85 +L84 +L31 +R18 +R925 +L362 +R25 +R6 +L12 +R88 +L88 +R37 +L58 +L79 +L284 +L34 +R37 +R81 +L148 +R48 +L79 +L21 +R811 +R51 +L56 +R66 +L18 +R946 +L298 +L72 +L349 +R19 +L617 +R17 +L9 +L50 +L41 +R54 +L54 +L6 +R11 +L795 +R89 +R81 +L80 +L321 +R84 +R37 +R32 +L32 +R829 +L6 +R677 +R10 +L74 +R28 +L927 +L37 +L45 +R54 +L31 +R33 +R99 +R84 +R64 +R42 +L4 +L49 +R53 +R36 +R28 +L5 +R29 +R12 +L63 +L67 +R159 +R437 +L66 +L37 +R51 +L22 +R885 +L77 +R24 +L30 +R48 +R95 +R70 +L30 +L54 +R214 +L34 +L103 +L84 +L33 +R317 +L476 +R31 +R41 +L47 +R55 +R96 +L626 +R34 +R92 +L665 +R142 +L362 +R561 +R67 +R96 +L2 +L37 +L83 +R783 +R90 +R70 +L55 +R495 +R25 +L973 +R56 +L54 +R46 +L59 +L7 +L93 +L79 +R38 +L21 +R858 +L732 +R709 +R76 +R41 +R69 +L28 +L5 +L34 +R13 +L26 +L20 +R80 +R20 +L691 +R29 +L76 +L108 +R37 +L277 +R97 +R31 +L42 +L56 +R98 +L94 +R34 +R39 +L902 +R81 +L73 +L27 +R931 +R69 +L62 +R58 +R20 +L51 +R54 +R29 +R82 +L830 +L446 +L41 +R87 +R935 +L952 +R17 +L83 +R99 +L16 +R41 +L41 +L77 +R98 +L15 +L6 +L889 +R88 +R1 +L426 +R26 +R59 +L59 +R646 +L68 +R935 +L813 +L66 +L59 +L43 +L24 +L34 +L74 +L928 +L88 +L25 +L696 +L55 +R54 +R84 +R8 +L75 +L79 +R83 +R72 +R45 +R136 +R78 +L79 +R50 +L90 +R5 +R52 +R848 +L38 +L87 +R95 +R30 +L83 +L88 +R66 +R94 +L89 +R95 +R472 +R33 +R8 +R92 +L193 +R89 +R204 +L57 +R57 +L74 +L68 +R742 +R70 +R76 +L92 +R42 +R56 +L54 +R702 +R831 +L31 +L307 +L21 +R30 +R158 +L60 +R20 +R80 +L26 +L90 +R709 +L520 +R59 +L32 +L592 +L8 +R33 +R54 +R13 +R98 +L476 +R46 +L68 +L26 +R858 +L36 +L13 +R43 +R74 +L7 +L193 +L31 +L66 +L203 +L354 +R18 +L64 +L668 +R68 +L54 +R52 +L98 +R65 +R21 +L91 +L11 +R96 +R31 +L11 +R197 +L63 +L23 +R20 +L44 +R73 +R65 +R75 +L13 +L87 +L62 +R84 +L98 +L68 +R44 +R65 +R735 +R38 +R62 +R97 +L97 +R98 +R97 +R95 +R10 +L374 +L16 +L8 +L7 +R88 +R17 +L1 +L99 +R57 +L57 +R76 +L76 +R711 +R55 +L83 +L83 +R42 +R1 +R57 +R71 +R29 +R357 +L75 +R89 +L35 +R82 +L558 +R79 +R61 +R18 +L18 +R99 +L440 +L559 +R25 +L25 +L278 +L22 +L30 +L11 +R41 +R40 +L81 +R96 +L898 +L50 +L7 +R32 +L701 +R69 +R36 +R14 +L406 +R56 +L15 +R63 +R27 +L84 +L41 +R20 +L37 +L194 +L39 +L641 +L59 +L571 +R25 +L63 +L67 +R3 +L27 +R110 +L12 +R64 +R666 +L72 +R43 +R856 +L30 +L25 +L18 +L4 +R10 +R12 +R271 +L58 +L26 +L289 +R672 +L22 +R52 +L425 +R71 +R204 +L34 +L75 +L241 +R38 +L295 +L143 +R76 +L40 +L852 +R35 +L19 +R94 +R45 +R45 +R73 +R774 +R30 +L34 +L91 +R560 +L35 +L61 +R95 +R27 +R454 +R367 +L43 +R45 +L16 +L59 +R9 +R1 +R98 +L78 +L63 +R74 +R91 +R96 +R2 +L7 +R7 +R270 +L70 +L10 +L85 +L79 +L26 +R25 +L25 +R838 +R19 +R43 +L65 +R39 +L774 +L62 +L38 +L41 +R48 +R6 +R67 +R980 +L764 +L462 +L34 +L9 +R554 +R44 +R93 +L81 +L201 +L95 +L678 +L33 +R48 +L42 +L12 +L149 +L39 +L946 +R147 +L758 +L759 +R16 +L17 +R85 +L15 +L53 +L47 +R97 +L17 +L633 +L36 +R899 +L48 +R68 +L83 +L664 +R2 +L85 +L253 +R42 +L594 +R55 +L92 +R54 +L10 +R48 +R684 +R713 +R58 +R7 +R96 +L61 +R883 +L83 +L84 +R4 +R80 +L34 +R898 +R10 +R944 +L867 +L51 +L2 +R23 +L994 +L27 +R34 +L424 +R90 +R655 +L54 +L1 +R66 +L13 +R35 +L93 +L95 +R37 +L23 +L14 +R75 +L75 +L31 +L29 +L40 +L24 +R86 +R11 +R27 +R39 +R61 +L233 +R9 +L992 +R55 +R61 +R417 +R83 +R892 +R3 +L58 +R63 +L22 +L74 +R701 +L5 +R23 +L90 +L73 +L81 +L43 +L89 +L93 +L54 +L56 +L44 +L341 +R5 +R7 +L36 +L35 +R79 +R21 +L834 +R213 +R5 +R502 +R14 +R70 +R30 +R31 +R69 +R34 +R347 +L22 +R39 +R88 +R782 +L60 +R80 +R312 +R579 +L79 +L19 +L81 +R113 +R13 +L26 +R30 +L43 +L632 +R45 +L12 +R994 +L53 +L79 +R550 +L32 +R46 +L14 +R4 +L61 +L43 +L9 +R67 +R44 +L87 +L15 +L11 +L62 +L856 +R40 +R46 +L92 +L65 +R2 +R35 +L34 +L23 +L924 +R41 +L42 +R64 +R70 +L89 +L243 +R22 +L79 +L56 +L344 +L33 +L67 +L94 +R94 +R42 +L42 +R20 +R93 +L63 +L77 +L73 +R28 +R10 +R82 +L66 +R46 +R40 +L36 +L29 +R841 +R95 +L55 +R88 +L44 +L428 +R28 +R42 +L11 +R785 +R930 +L46 +R448 +L48 +R99 +R1 +L391 +R91 +R74 +R26 +L59 +R59 +L92 +R49 +R39 +L96 +R22 +R78 +R6 +R80 +L89 +L465 +L98 +L234 +L23 +R23 +R64 +R33 +L37 +R207 +R59 +L87 +R3 +L71 +L18 +L861 +L64 +R551 +L79 +L20 +R790 +L70 +R45 +R35 +L92 +R25 +L13 +L68 +L32 +L65 +R65 +L2 +R657 +L60 +L95 +R40 +R760 +L599 +R99 +R41 +R41 +R88 +L70 +L37 +R7 +L27 +L43 +R35 +L449 +L86 +L74 +R7 +R92 +L268 +R43 +R391 +R55 +R64 +R51 +R99 +L685 +L47 +L28 +L42 +L58 +R28 +R372 +L11 +L89 +R371 +L3 +L68 +L38 +R79 +L43 +L998 +L9 +R676 +R556 +R147 +L622 +R52 +R6 +R48 +R7 +R539 +R192 +R42 +R66 +R43 +R526 +L91 +L548 +L81 +R851 +R80 +L57 +R23 +R13 +R899 +L33 +R51 +R37 +R87 +R95 +L95 +L62 +L38 +R66 +L44 +R37 +L990 +L69 +R95 +L94 +L701 +R98 +L98 +R42 +L42 +L36 +L64 +L10 +R41 +L31 +L56 +R56 +L98 +R62 +R60 +L24 +R762 +R941 +R42 +R524 +R931 +L757 +R66 +L66 +L25 +R44 +R88 +R16 +R29 +R80 +R25 +R52 +R462 +R19 +R83 +L673 +L43 +L88 +R88 +R962 +R40 +R98 +R452 +R48 +R429 +R27 +L56 +R253 +R135 +L78 +R90 +L59 +R19 +R40 +R154 +L53 +L1 +L36 +R536 +L88 +L73 +R85 +L22 +R65 +R278 +R16 +R59 +L19 +R99 +R98 +L98 +R46 +L46 +R80 +L149 +R82 +L813 +L82 +R29 +R53 +L71 +L38 +R79 +R75 +L45 +L40 +R40 +L42 +L29 +L29 +L84 +L92 +L24 +L21 +R93 +L14 +R42 +L68 +L17 +L37 +L72 +R17 +L27 +R4 +L73 +R48 +R94 +L69 +R17 +R51 +L68 +L38 +L62 +L44 +L40 +L44 +R51 +L39 +R54 +L14 +L91 +R30 +R94 +L57 +R64 +R36 +R76 +L24 +L70 +L82 +L6 +L17 +R5 +R47 +L49 +L19 +L6 +R29 +R40 +L46 +R40 +R32 +R5 +L20 +L3 +L3 +R45 +L15 +R26 +R22 +R6 +R7 +L22 +L21 +L23 +R33 +R43 +R33 +L46 +R29 +L2 +L1 +L38 +L22 +R9 +L13 +L8 +R40 +L24 +L44 +R28 +R37 +L21 +R38 +R26 +R34 +L47 +L19 +L8 +R48 diff --git a/data/02.in b/data/02.in new file mode 100644 index 0000000..3ea7f8f --- /dev/null +++ b/data/02.in @@ -0,0 +1 @@ +9100-11052,895949-1034027,4408053-4520964,530773-628469,4677-6133,2204535-2244247,55-75,77-96,6855-8537,55102372-55256189,282-399,228723-269241,5874512-6044824,288158-371813,719-924,1-13,496-645,8989806846-8989985017,39376-48796,1581-1964,699387-735189,85832568-85919290,6758902779-6759025318,198-254,1357490-1400527,93895907-94024162,21-34,81399-109054,110780-153182,1452135-1601808,422024-470134,374195-402045,58702-79922,1002-1437,742477-817193,879818128-879948512,407-480,168586-222531,116-152,35-54 diff --git a/data/03.in b/data/03.in new file mode 100644 index 0000000..faffc9c --- /dev/null +++ b/data/03.in @@ -0,0 +1,200 @@ +2353224242223333222212222212122232212325242222323234222233222242242213332433221534222221224132232122 +2238627227623421225352362446932882413382783432342232284228276225212222465623527237113223452255221122 +4333584553665256334444432629376353732486456562233346544226565255522533335442345422534625531566554453 +2331515514151522535351533453445225411445433534454355153332542341241432153554213241545122535524336789 +5244553233324443423132423535451232232222244255155243543225522452223243441551222523239452525132222275 +6467467676645453567374642755656377365716546987664947684645954566548644568644547565868635656632655577 +3299363734434823696343285343334412335442473823345434344433744533134432329449246232233214378444363733 +3233481436375215413242453252833233373534332321335225254235255339133623235563231244322322333352332332 +2522162223212222122221122323322421422312221922212224237272222122322229322112222212222232212526222222 +4234334414524442463434433444442445436442442432346334543343324333344434444344544445134443442232354433 +3643443543334343444242443425223333353334723236434334457454353537334235534344442433246444324143433423 +2212429383247323851422241442624237362222628243346233222464222363966437445347434372434434212223437682 +6465366332534263763231523241522341332871336132244226422122742536537624251632522124713322622632233332 +2224422232242212251325212222225221223222824142211222222122322216222332122423433242142132212224222232 +4344434366338353665448569343557745435533834635377445156855347885357545545466595484953545456439336636 +2232222229272422232122221412111221219243227212222222221113221223222122232322233222222321232122121322 +2222342242222122222222322124621332222232311221422222312211222221267421322232221223222233332111212223 +8645545447936673855846524747618565545426273436355834628447553134327265347425343334723133444453344248 +6185554735288258267542829442735385499736515228542596435823643473264344338722259228849217876874425372 +5523882142244292214453529242344647323823751563443322495344447423625762272535562253443443736432417763 +2153434244844424544434235443539344343444432244552455443342443454533345344322444543435434434932434343 +2422322524141221232233221364223233323622532236222423232242332341333252338233573113223232122213332339 +3234233251242122132225212222222264222232132223224331412421121222312322212533312122422442124323122122 +2122222212342112222222322222312223132322232212222321322932233122222222223222222133132322233314112223 +5583554436335463352356253345554853743186232339535558342437646234554334555543534634446625544658153632 +3221157534221432932228122336523332232232336342322232132633231223331345222622243225623321222623344271 +1222137211326322142532422252222186525322137123342221212612117221223252123571222225422621214243275812 +3262322253212424382224332134243422462322221143225232112142112222341223251132553231132243122262221552 +5322222622223363221323232232622421322262232221432325122223332222323214224632122123232123232122542232 +2224221133212222253321212221122221221222322293322321321212223222422221322131122122132212132132222323 +8774396444632332222241452334444333363335437437334333525324563633447643233347353447497324352373234333 +8611862331864212455238316728512838438257686862254542422568868465624813586343131411538485543542242219 +7686757556483568757566678855786767557595167745569555776555956647877671863782577567539678336876845557 +7744488628556678972964355645896755764635555747374775634473657444467564772547476787475655865553937676 +6662432182732552125326635535425454552336243735493226323391723374435754314233359342367744133553942244 +5333224125221632323228432332322343332324574242223253242223232538323222327433222133324363333332243435 +4662328122223322223222272522214622933221212242213126723224623214252267222382224724422127764722387151 +4434476337343426474454454543473444332724454444457364643954834243515337452442436534134324264444346437 +5447367434345444525643554224743443743544523534267653547452453745322654444433457354644534214233454454 +1378494256266946932588715479827669389979688127855958274449792247329455687859795879377579497795295166 +3342345334334433152214433234334434243431435424543544343454454542344533455551233443444844352342936535 +4425462424453442464545454452534333242544453313255333434324574262336434844727454314435634343315864444 +6345157454242645227413742425365354664557775633555443246367415435532927644524346863346465332543425324 +7222225222212225522311245333222272232132216225244222114322222272122152393123242222242313422224232242 +2135125333124222223122533333433364332233334213223233126222123223323213323333333614233825333332224233 +2922423512236225112823232222322112485144333223262222172226212722224222221222422282322222725222622612 +2913332343253429423423234323323331434333333343423323333342332236332235343343234331315333332333143332 +2462122122732424222512322235322222223112716233172221533114316273421724262222326212212132223341251222 +5443434462941334334862437483744722496644846368384529744975644964735244343425876544334456524129258554 +2323262314323522643342432224522342214243421525313244151526727115455324252242522225223242352125335522 +5224534332232443343433423434443443332242443425452234243441331323342234243333341312432384222421143214 +4523224266852222252722822322324442335112222882215826228232222534263624221441222412726235224536222123 +4252433335454333433433122322132613523242334213236326325227234422326423133527223432333333333232233322 +2824678323727226712832912263144865192522142434756275362284994422511242527821279234264486861435255459 +1342254544224131632222251253275232162636613256433221332222232322922322661164224322512422424234222223 +3332363333313242651134753333233433343443334336633234352333329353522143334333973515323333832376354333 +7232364331352614221373624273332531224483532523263442462222232242233332353335952253333365312342226533 +2242223345212524325312342249233124322443412252524322542534322443228342135432535282232221588223433232 +6443649223332263872223533333273545325252842695648521343475343433177336335223435342832444322223412437 +3766574737237225244271352675413356271626667755577143246157515371641345111157374174373664123325356589 +2223121222122527212121331222422222222242272226223342253223762223333138222262233224411222232321226112 +4277726633445261334632354844537614726225544441413647633125836374249884224443788668658543565427244385 +6445422592225431525522123526443452233435444443244422233742452214243454223341316382142344242365163124 +1143453323233533224433232315621252454332344141543144333312332552363753422337453242534522233273422323 +3723221422324433422243233242122113233212322333634314223523134234255232222535135242142261223212312223 +5363333327323313214763324438575542517724334124427711733121343232121336332632817232223338237331321272 +1221232222232214222342222223242225223263422142342312222222124423652213522232227243222431221221222232 +2332234232222232321423433622223341512122221332623312122221222233212232221193132333322213522383522222 +2523223312222223324222122222211323634221232223232222262212132233222212122292122212231122222122221222 +3313436445333333542373333333366433332433433334323339342363531313322343383535333353334133434439333343 +2222124253723233223213317221933232424212322211232325325332232232334252332242222326123323322232322322 +7338624725437336277315442535224236542964554734276858544623435123734226342242546253253445347764256233 +3452195946122722232242232432253623334116442924221881432244338324335222122931422532473232333734483162 +4654343244544644325423324545344434653421133244345322443232453434424335323636323443442133432544433445 +2411324322222552532222822121224423223222212221122221225242122132222212333221222222217243232221222222 +5465673345856346652586576646249781478254229778535294514846277852225274963847477866675475667467565777 +4374353711437236534446233537475727574355344663654232546472344388535337445247337237435253353233543332 +7732745395362367433555647772547773333245537376374673363366634366474657674885763735657736343547663635 +2516235143651122522513142111644454255244664622364135655666323525143323546344333442535254452643655789 +7734235122322443636834272155462353744333358223233783563475464545333243548327582656733725767824622488 +4334333343343242333522445462424454432342532734123443433342344423423432473421333543343342434451433343 +2432242232252224242521122222222242443222312341122223221222223213122222421142122323225223222212132121 +7523655356223928283485625887526628376363471724545654326468252473574464586483543465249256825412275276 +4324223242123222122422321433212112131222323125421132212212322322231222222222414122223132222212232624 +1522232531112253212123652213212432221244322121233132334223183211232222223132321512241226325221213112 +1675565816346362353246545757545265765694657445667565685567555585647565345593755547455325454867364555 +2313232222226222221222233222322162222322223222363222212224122423123122242233142243222222123232321922 +2623333322126318342122442332914223341223432213372323224932234332232222423334212142545335323273321412 +3447469713328311462242297772822667722625342545423233829632467279456123478431625377426273449922225232 +2431212624125236322238421352512591724552222221223725262455222521362233126764162522522315232622422422 +3323232243343421134233432293323231433332322315423131412221332336654221232324433643444125312352132232 +6467974665768691766464768767786659656769695666567765646775774575686257944566775286587785665674685797 +1334532223332213342222335223321323291122133333423323311233223222232232323332232221365532242223312233 +8673523332221221737338334233242312312333636443223432275222232536311543222221542464314213332328353242 +2763422247622232714212126372224423525374525145241427724133242223222522532434245243224733334246223233 +3396312222537221284525221332356421513224523322143342626222522215243122212254432828232352522243252181 +4335434424276163434442364543353483874463226534823335432532943445424133445226364411332453463711253764 +2633313224535333534344643424334624344342314434823142772334334333734324352439413414235422334333364233 +6564332641251125462424666122542144323253354253236317931272566133456226545134626454555351364572313548 +2254422444265545453542442533326342132444243455243242534445157354562444652332333425352424252534345232 +2312223332222223113222122422432141452231332313212343222223222222412242324334222234222223122222412252 +6527226656123754212251268446348566541122243453176634522222722172272233572252221264472245221262225213 +3212242433223242123233432311224233133143372432233212332912123334222332323311334228422323234332214242 +3234235367223475472153252333331523222243333472433235233229225637523512221333436274533436211442222433 +7736657756564666554584449756545747769676456655145666365566715735276623565585996572666464945676466646 +4333452223335433433334233243324222342283324223421433334244232344157333335233328453233343472312422349 +2272153272234523222365371352222862213672212346132823526235241153676737744625761414822375424275765523 +4223134244634237132243344221214321432443932735222133523132451245123422431264222252216372222195262532 +7635333657347543326863443434347783833336936542433337456346336332683563668575432162334443524473884545 +4623243422196562443629656975223262634432742336181737221575322855237433672385356537623268634753131443 +2422222242343212242422443234141141232212212228643123224352234421131222222324263323122432222244863322 +6477525433221758477419625546469714335354763813463326664713654622251333622538373222465435339932582366 +1875222142133538953133232322522244231945222222663825122874273282336583321452343467131212755726126222 +4434645465533447264345643324352324524661423137354144322363434514343541633554633433933487233325134524 +3223333534335324333233253221326352746323155212334323393334373333529335322252243262252632252332352333 +4321222333222223323222251322322322222432241232213222322213132234542412232212431322223233222221312621 +3231134434231233312132123323144232313142433222212243233214334343311422314333141211231134111123356789 +2642423425364131113245452542456223623443242231223352624413324343722232735416432622553424224422435343 +2321233661223452233213222424322211242232412222381222328312252352251425294212332322222232712222121322 +2225222234222221224421435522243354253234342241222212111113221234442222474332244322224423123212122222 +4224422122333123213242223234234423223234212322423332134322333232331334322222224142354422223341322213 +2237352222224332223522322342333322236529322272222332112232322221321123332332262122222231213222232222 +2222333213332333323243333434232332212322233333342122333133143333334322332342323232331532233333324333 +5834325323443344444444454964423434334339295245744244343343344334348213543434343343541425544453344624 +1225233231222422233124212342111222313222221323231232124324432233232222324412233113122222323322214522 +2377467568477534475657417583649454125369574763549753369556325655544737495557848684585453544956255773 +5458433696666543525525556435575442756285545558725545535535944455334455534564755655555365445635435535 +9847555865827676657688569759758758555445794968796565767687569857578579948785658658585576858447769967 +6613238261823242523545581723261232235645224814221675642212653642225426832322543652227122633712124122 +4223136832152221221242224242421235231312422222372653842432251222217222233221128457252413232723312132 +6523524422321452322662663213432423223625223656261423272235914253154355243241223362223223223156453323 +3332426321425322751232142373324233674432334367314443332124347171245364341232233447344325331253477224 +3424223224249422222252522222322621432123226234321437344236662432624643662352454234623382552222223522 +4745777547674765475775774656648825546857634574258748465853668592564853254582492758724654777546552643 +6874766656665463175556445556564555646566545766644754544565666652655555657356465666844665542644366655 +3323233323323522173224232322323233224223112213213232333221322243313233233122232352237332333323322333 +2332332231212212323323222333233223223222263231212226232231212212222232323323634323231333342333111232 +2384433334231232533333242135333543234433233252432333332323336631332314333333233243322223452522133313 +3213252233232232332231331532642243333323242222323224113332254244242513324322214215313252343221222323 +3333442443343433323423335143432332423443324323313532232434333342344333344232243532313423433332233233 +2442444321442243128341345434255155444374435164232224644444124414243424432534483222232334323244333443 +3313442141242234344233241342333224232341144322333152433342322332314552226223322352333235232932154434 +4441424342443643444352244423125443442234423624444463144342342342124434234423345623144613632462344543 +7566246755377854878728979949865656386773879557878689867467898977779735578737985559795598997657876456 +2433325321441321222262222333452424322222212433521232533322322323322312212333222234212221212323342222 +8863468696899235884458428968738919231387528869689126392827879217994372382772927392449629876546839273 +2225734443314333633234333323321324542243243544742333523323433334434133463331334426443542431343264342 +6555535456552536485353733334546644451556565452546454416757523955445347246464464535444443425334565253 +4224543525334235224219142146114222324331221341524242222211243552222222581244332321232276354744252222 +4234455344444744253534644332356446542234144444444432443444344244473435285343451443544353378444244345 +1333343693255233385246362233338931243229349233139273433226237473644272523443634532943537331534373431 +4244236433332433333322333333223343233332242233344333234433333333334534323533333334313233334353323323 +5423256123322325222235232523112323437324414335321323226333233462352282522122522232132522322334524631 +3822342336645552493494648368266599555342696296653264344868567685454684553668526834564633355945447866 +2213312223222233332243232324364231333432312432423423352592433352223424325322432322935354222229343235 +3222362713644432612232553232254225244424237526131222653222333152522226612426222655122221126242126262 +3433335333343333533339359253131931343323223613335413343233213533333373337333413331383333254333533324 +4238131312372266238322323992851888128123122242282434742712328963325226342472212242762454422754113423 +2533763527162452233223312322522222222463252222221537324452124222233212423117175312232562225312223132 +4355252364454352653444344352434454444365563345544335455442244324555345645453344434544262654443354444 +3222333333331223223342537223533233224234342325233322432234424133131223333354422332223322134343324234 +3235313334434935233364333358422336345244423533352323334733321434232423533223343423245143335433313355 +7697963986575952869578568946977734786777764174559666468678697847993886557885687487698767835597768965 +5222132412221423232223233342232224221242224325132323122223332642342122233122223422331144322125222432 +3433233333316233323332333331333433333311223433223332332333132343433233313433323142243223333452342233 +3224122132332334432842432444234444143344452322333363442433433442333444441342323323443242433523233446 +3114233442225222434322233125352433227221132313121349242332232334223333231122335313224222233142243211 +2222221322122111132232222222222222221221232312322212223132232221222222311222212212222122133132221222 +6232242212224272122326144421411264222312221232433517214143332124722422223322224622472272323224228424 +3222232132223232332222322222242321133722212322223313322331231332222332322233122232122222233232221342 +2221223332211613521221222222166122222222122322222432182122512232225224121362222225221352222426222422 +1212221622212224222722822222231222231722253222333222322223242221322226222362222322324222524221142243 +2243232122244322321423443121112223332223334322123142336247321341222222221323432233212322431323323242 +2477541421421212523544524234435357333455343445773315222547448321533765635533351446547455454532354315 +6455365435366156655234455243423435533613423132633454254236643252253477591444435334313234333452215654 +7846638476554768752458675595477943359658686473796148755347335676585536664843746345466357726596263563 +1475423222553125435222445752252422332255232122244332221612453259315242432242223252222533564433221525 +5564544453445544243435454843336734855563554272347436435235443545533333443444554754434433446444526445 +1131212222222223212222222432412221423232233131552221642112223232227411122227321256722131132142122934 +3427662365266236258757354314556462242745682674515375567224366445522522246357735414163132668565436257 +3222423333532334552532453223355353427322453214333513642242312352327675244324512632525363366333556753 +2313232123243245232222422333322223522342222432223642258522323124222233222422333322233222442323232322 +3557826334243455753445448244454748554235356374552378431535423443334335333413455754454555428335353533 +4222725565222545153214372421122136354112352223535122153132522232222221423213222222123321232222325242 +3337324234323263423244332343433333434432242273343331833356333221433473435332553423443533143445433343 +4345454523343352443337322333333323334362521663554323433344351237852333328247845444331113433392233327 +2232123183322215223322251225162354112223535221252253222222232221232222223422223322322242122232322222 +2223223212123222224322322223423222332324124133236222132322232212123131231221136333342422332222332222 +1421232213322322232223131322212131231223221311313333133222232333132334323213133232232212331332222112 +1322123232232243423313212215222123212242721222322317144252262472233213212322212422222313223243421222 +2223222122222222223222135221322212224225252432522112214282221515122227332123211222332314211215252222 +3534147622334554582542466524142269162252326432543244929242322286827523224522677326258211373392773568 +2232121322231323234123222222231222515222222122121122222322325132222223222422232222132232222233232232 +2213251232233123222211233223323133222132222532313211122122232222232144221325111112222134423662212232 +4545444353275454654344545244455543455555475154354662444445544644525564544244445455523154244545744444 +5774546566885687435555886759544756677558484755987675674636444879566765585496675474346575544644485499 +4275534464214754656464644825342342223257727338545457335353557353264475446332935672653437554246675445 +5222333352562523222112363624222421626421144642526322298233124462243752353641723432321232422224511363 +2222544122212134422245322622323232121113423222422311232232422322223221212233652414122759322232231122 +2342222332222272222432421224223245222124221224321242411222237231231217442234312223223122222112227422 diff --git a/data/04.in b/data/04.in new file mode 100644 index 0000000..d60afe6 --- /dev/null +++ b/data/04.in @@ -0,0 +1,137 @@ +@@@.@..@@.@@..@.@@@...@...@@@.@@..@..@@@@@@.@@.@@@.@@@@@@@@@@@@@......@@@@@@@@......@@.@@@@@@@.@.@@.@@@@@.@...@......@@@@@@@@@@@@.@@@@@@@ +@@@.@@@@@@@@.@@@@.@@@@.@.@.@.@@@..@..@@@@...@@@@@@@@.@@@.@@@@@@.@..@@@@@.@@.@.@.@@@@.@@@......@@@@@.@..@@@...@@@@@@@@@@.@.@@@@@@@@.@@@@.. +..@@@@.@.@.@@@.@@@@@..@@@@.@@@@..@@@.@.@@@...@@@@@..@@@@.@@@@@..@@@@@...@@..@.@@@@.@@.@@.@@.@@.@..@.@@@@@....@@@...@@.@.@@@@@.@.....@@.@@ +.@@@..@@.@.@@.@@@@@@..@@@.@@..@@@@...@@@.@@@.@@.@@@@@@.@@@@..@@@@@.@@@@@@@..@@....@@.@....@@@@@.@@.@@@..@@@@.@.......@@@@...@@@@.@..@..@@ +@@@..@..@@@@.@.@@@@@@..@@@@..@.@.@@@.@..@@@@@.@...@..@..@...@....@@..@@@...@@@@@.@.@........@..@@.@.@@...@@@@@.@@@@..@.@@@@...@..@@.@@..@ +@.@@.@.@..@@@@.@.@@@...@@@..@.@.@@..@.@@@......@..@...@.@@.@@@.@@@.@@@@..@@.@.@@@@.@..@..@.@@..@@@@.@@@@@@@@@@@@..@@@@..@@.@.@@..@@..@..@ +.@...@@......@..@@@@@...@@@@@.@@@.@@@@@.@@..@@@@@@@.@@@@@@@@@.@.@..@@@@...@@.@...@@@@@.@@@@@...@.@.@.@@.@@.@.@@.@@@@.@@@@@@@@@.@.@.@...@. +.@@@...@@@.@....@@@@@@@.@@@.@@@@.@@...@@.@@@@@@...@@@@@..@.@...@.@@..@@..@@@@@@.@@@@@@@@@@..@.@@..@..@.@@..@@.@@@@@@@@...@....@.@@@@@@@@@ +.@..@@@@@@@@.@@@.@@@@@@@.@@@@@.@.@.@@@@..@..@@@..@@@.@@@@.@@.@@@@@..@@@.....@@@.@.@@@@.@@.@.@@@@.@@...@.@@@.@@@@@@@@@..@.@..@@@@@@@.@@@@@ +.@.@@.@.@@@@@@@@@@@..@@@@@@....@@@.@.@.@@@.@@@@@@@@.@@@@@@@..@@..@@@..@@@...@.@@@@..@@@@..@@@@@@@@@@@@.@@.@@@@@@@@@@..@.@.@.@@.@@.@....@. +@@.@@@@@..@.@.@@@@@@..@@@.@@.@.@@..@@@@.@@..@@@@@@@@.@@@@@@@.@@@@@@@.@@@@...@@@@.@@@@@@@.@@..@@.@.@@@@@.@@@@@@@.@@@@@@@@.@.@.@.@@@@@@@@.@ +..@@.@..@@.@..@.@.@.@@...@@@...@.........@@.@.@@@.@.@@.@.@@.@@@@@@@@.@.@.@@.@@.@@@@@@@@.@@..@@@@@.@@.@@@@@@.@.@.@@@.@.@.@.@@@.@@.@@...@@@ +.@@.@@@..@..@@@....@@@.@@@@@@@@..@@@@..@@.@@@@@..@@.@..@@@@@@@.@@@@@.@@@@.@@@@@@@@@@@.@..@@@..@@.@.@@....@@..@@.@@...@..@@@@@@@..@.@@@@@@ +.@@.@@@@@@.@@@@.@.@.@..@@@@.@..@@..@.@@@@@.@.@@@@@@@@@.@@@..@.@.@.@.@@@@@@@@@@@@...@@.@@@@@@@..@.@.@@@..@...@...@@@@.@@.@@@.@.@.@@@...@.. +@@.@..@@..@@..@.@@@.@@@@.@@@@@@@..@.@@.@@@.@.@.@@@@@@.@@@.@.@@@@@@.@@.@@@.@@@@@@@@@@@@@@@.@.@@@@@@..@@@@..@@.@@.@@@@@.@.@@@@@.@@@@.@@@@@. +@@@@@.@.@@@.@@..@@.@.@@@@@.@@@..@@@@@@..@...@....@.@@..@@@@.@@@@.@..@@.@@.@@@@.@..@@.@@@@..@@@@.@.@@..@@@@.@.@.@.@@@.@@@@@@.@@@@.@...@@@@ +@@.@@@..@..@.@.@@@@@@@@@@@....@@@@@@@.@.@@@....@@.@@@@@@@@@@..@@.@@.@.@.@..@@.@.@.@...@@.@.@@@@.@@@@@@@@@@@...@.@..@.@..@@@.@@@.@..@@@@.. +.@..@@@..@@.@@.@..@@@@@@..@@@@.@@@@@@@@@@@@.@.@.@@@@@@.@@.@@@@.@@@.@..@@@@@.@@@@@.@.@.@@@@@@.@.@@.@.@.@@@@.@..@@@.@@.@@@.@@.@@@@..@...@@@ +@@....@@.@.@@....@.@@.@@@@@@@@@@@@@..@.@..@@@@.@@.@.@@.@.@@..@..@@@@@@@@@@@@@@@@@@..@.@@@@@@.@..@@@@@.@.....@@@..@...@@@@..@@@@.@@.@@.@@@ +.@...@@@.@@.@.@@.@@@@.@@@@....@@@@@.@@@@@@@@.@@.@@..@@@@.@@.@@@@@.@.@.@@.@.@@@@.@.@@.@@@@..@@@@@@.@@@@.@@.@@..@@@@....@@@@@@.@@.@@@@@@@.@ +.@@.@@@@@@@.@@@.@@.@..@@@.@@@@@@@.@@@@..@@@@@@...@@@..@..@@@@@@@.@@@@...@@@@@..@@@@@@..@@.@@.@@.@@@@@@@@@.@@@@@.@@...@@@@@@@.@@..@.@.@@@. +@@@@@.@@.@@@.@@@@@@@@@@@@.@.@.@@@@.@@.@...@@@@@@...@@..@@@@.@@@@@@@.@.@@.@@@.@...@.@.@@.@@.@@..@@@@...@@.@@@@.@@@@@@@.@@@..@.@...@@@@@... +..@@@@@@.@.....@.@..@@.@@@.@@@@.@@@@..@..@.@@....@@@@@.@..@@..@@..@.@@.@@@..@...@@..@@.@@@@@.....@@@@@@@@@@@@..@@@@@@@..@@@.@@.@@.....@@. +@@@@@.@@.@@.@@.@@@@@@.@@.....@.@..@..@@@@@@.@@@.@@@@@@..@@..@@@.@@@@@.@@@...@..@@@...@@@@.@..@@@@@...@@..@.@@@..@.@@..@@@@.@.@.@@@...@.@@ +@@@@@@@@@@@..@@@@.@@@..@@.@.@@@@@@@.@@..@..@@@....@@@@@..@.@..@@@@@@...@@..@@@@@@@@@@@.@..@..@@@....@.@@@..@@@@..@@....@.@.@@@..@.@.....@ +@.@@.@....@..@@@@@@@@@@@.@........@.@@@@@@@@..@..@.@@.@.@@.@@@..@..@..@...@@@@@@@@.@..@@@...@@@@@@@@.....@@@..@@@.@@@.@@.@@..@.@@.@@@@@@. +.@@@..@@@@..@@.@.@@@..@.@@.@@@@@@@@@@.@@...@@@@@@@@@...@@..@@.@@..@@@@@.@@@@..@.@..@.@@@.@@.@@@.@@@@.@@@@@@.@@.@@@.@@..@.@@@.@.@@@@@.@@@. +@@@.@@.@@.@..@..@....@.@@@@@@@..@@.@@@..@@@@@..@@@@@...@...@@@@.@@@.@..@@@..@..@@@@@.@@.@@@@@@.@@@@@.@@@@..@..@@@.@@@@.@@...@..@.@..@@@.@ +@..@.@.@@@.@@@@.@.@@@.@.@@@@..@@@@.@@...@@@....@@..@@.@@@@@@@@.@.@@@@@..@@@@@@@@...@.@.@@@.@@.@...@@@@@.@@....@@.@@@@@@....@.@.@@@@.@.@@. +@@@@@@..@@..@.@.@...@@@..@....@..@@..@@@@@@@@..@.@...@@@@@@@.@.@@.@@@.@...@@.@@@@@..@@@@@@..@@@@@.@@@.@@@@@@.@@...@@@@@.@.@.@@@@..@.@@..@ +@...@@@@@@@@@@@@.@@@@@@@..@..@.@@@@@..@@@..@@...@..@@.@.@.@@@.......@@@@@....@...@@@@@@@@@@@.@.@.@.@@@@@@.@@@.@@....@@@.@....@@@@@@@@.@@. +@@.@@@.@@.@.@@@@.@.@.@@@.@.@@@@..@.@@@@@@@@@.@.@@@@.@@@..@...@@@.@.@.@.@@@@@@.@@@@@.@@@..@@@@.@.@@@@@@.@@@@@.@@..@@@@@@@@@@.@..@@@@@@@@@@ +@@.@..@@@@@.@@@@.@@@@@@@@@@@@...@@@@@.@..@..@.@@@@@@@@..@.@@@@@..@.@@@@.@..@@..@@@@@@@@@@..@@@.@.@@@@@@.@@@@.@@@@@@@@@@@@@.@@@@..@@@@@@@@ +.@.@@@@..@.@.@...@@@@.@..@@@@@@@@@...@@@..@.@@@..@@@@@@@@@...@@@@@@.@@@.@@.@@@@@..@@..@@....@@@@@@@@.@@@@.@@..@@@@@@.@.@@@@@.@@@@@.@@@@@. +.@@@@@@@@@..@..@@@@.@.@.@@@@.@@@...@@.....@.@.@@@@@@@@@@@@@@@@.@.@..@@.@.@@@..@@..@@@@@@@.@@.@@@.@@@@@..@@.@@@@@@@@@@@@..@@@@.@.@.@.@@@@@ +@@.....@.@@@@@@.@@.@@@@@@@@@@@@.@@@@@@.@@@@@@@@...@@..@@.@@.@@@@@@@.@@@.@.@@@...@@@@@@@@.@@@@@@.@@@@.@@@@@@@@.@@..@..@..@@@....@.@@@@.@@. +@....@..@.@..@.@@@@@@.@.@.@@@@..@.@@@...@@@.@..@.@@@@...@@@@@@@.@.@.@.@@@@@@@@@@@..@.@@..@@.@@@@@@@@...@@@.@@..@.....@@@@@@@@@@..@@.@@.@@ +..@@@...@.@@.@@@.@@@...@..@@@@@.@..@@.@.@@@.@@@.@@..@@@@@@@@@@@@@.@@@@@..@.@.@@@@@@..@@@@..@@@...@.@@@@....@...@@..@@@..@@@@@..@..@.@@... +.@@@@@@@@.@.@@.@@.@@@@@.@@.@........@@..@@@.@.@@..@@..@@@@.@@@@@.@@.@@@@@@@.@@@.@@@..@@....@@...@@@.@.@.@@@@@@@@.@@@...@@@@@@@@@@.@..@@.. +@.@@.@.@@@@.@.@.@@@@@..@.@.@...@@@.@.@.@.@@@@@@@.@.@@.@@@.@@@@@.@@@@@@.@.@@..@@@..@.@@.@@..@.@@@@@@@@@@.@....@@@.@@@@@@@@@@@@@@@...@@@@.. +@@.@@@..@.@@...@@.@@@@.@@@@@.@.@@.@@@@@@@@@...@@@@@.@@@@@@..@.@@..@@@.@.@@@..@@.....@.@@.@.@.@..@..@@@.@.@@.@@@@@@@.@.@@....@@.@@@@...@@@ +@.@@.@@@@@..@@@@.@..@..@@.@.@.@...@@.........@@.@.@@@@.@@..@@.@@.@@@.@.@.@@.@@.@@..@.@@.@.@@@@@@@@@@@..@.@@@.@@.@@@@@@@.@.@@...@..@@@...@ +@.@@@...@@.@@.@@@@.@@..@@@.@@.@@......@@.@@@..@@.@@..@@@@@.@.@.@@....@..@@@..@@.@@.@@@@@@@.@@@@@@@@...@@@@@@@@@@@@@@@...@...@..@@.@.@@@@@ +@@@@.@@.@@@@@@@@@.@.@@....@...@@.@..@.@.....@@@.@@....@@..@@..@.@.@@@@....@.@@@@@@.@@..@@.@@@.@@@.@@@@@@@@@@@..@.@@..@.@.@@@@@@.@@@@@@.@@ +...@@..@..@@@..@.@@@@@@@.@.@@@.@.@@@.@.@@@.@@.@@@@@..@@.@...@@@..@.@@@@@@@.@.@@@.@@@@@.@@@@@@@@.@@.@.@@@@@.@..@.@@@@@@@@@@.@@...@.@...@@. +.@@@@@@@@@@..@@@@.@@.@.@@@.@@.@@..@@@.@@@@@.@.@@@..@@@@@@@.@@@@@..@@@@@.@@.@@@..@@@@@.@@@.@..@..@...@.@.@.@@.@@.@@@@@@@.@@@@@.@@.@@@@..@@ +@..@.@.@@..@.@@@@@.@.@@.@..@@@.@@@@..@..@@@@@..@@..@@@@..@.@@.@@.@@@@@@@@@@@@@@......@...@.@@@@.@..@.@.@@...@@@@@@@.@.@@.@@.@@@....@.@@@@ +@@@@@@@@@@.@@@..@@.@@@.@@.@..@@.@@.@@@@@@...@..@.@....@.@@.@@@@@@.@@.@@@.@@.@@@@@......@@.@@..@@@.@.....@@@@@@@@.@@..@@.@.@.@@..@@.@....@ +@@.@@@..@@@.@@@@@@@@@@...@@.@.@.@@.@@.@.@....@@@.@@..@....@.@@.@..@@@.@@@.@..@.@..@..@@@@@@@@@.@.@.@.@...@@@@.@.@@@.@...@@@@@@..@@...@@@@ +@@@@.@@.@@@.@@@@@@@@@@@...@@.@@..@.@@@...@@.@.@.@@@@@@.@@@@..@@@@..@@..@.@.@@@@@.@.@@@@.@@@.@@@.@.@@@..@@.@@..@.@@@@@@@.@@@..@@@@.@.@@@@@ +@...@@.@@@@@@.@.@@@@@@@@@@@@@@@@@@..@@..@@...@@.@.@@@@.@@.@@@@@@@.@.@.@@.@@.@..@.@@@@..@@@...@@.@.@@..@@@....@@.@..@...@.@@@.@@@@@@@...@@ +@@..@..@.@.@@@@.@@@..@.@@@@@@@@.@@@.@@@.@@@.@@..@@.@@@@.@..@.@..@...@@.@@@@...@@@@@..@@@..@...@.@@.@@@.@.@@@.@.@....@..@.@@@@@@@@.@@.@@@@ +@@@@@@..@@@....@@.@.@...@@@@@.@..@@@@@@..@...@@.@@@@@@.@.@@.@@@@.@.@.@@@@@@.@.@@@@@@@@.@...@@@@@@.@.....@@...@@...@@@@@@@.@@@@@@@@.@.@@.. +@@@@@@@@...@@@@..@..@..@@@..@@.@@@@@@.@@@..@@@@.@@.@..@..@.@@.....@.@@..@@@....@@@@@@.@@@@@@@@@@@@..@.@@@@@@@@....@.@@@.@@@@@@@@@@@..@.@. +@@@@@.@..@.@@.@@@@..@.....@.@@@.@.@.@@@.@@@@@..@@.@@@@@@..@@.@.@@@...@@.@.@@..@.@.@@..@.@.@@@@@.@@..@..@@@...@@@.@@@@@@@@@...@@@.@@..@@@@ +..@@...@@@@@@@@@@.@.@.@..@@.@@@@@@@@....@@@.@..@@@@.@@@@@.@.@@@.@@.@@.@@@@@@@@@..@@.@@@@@@.@@@@@@@..@@@...@@.@@@@@@@@.@.@@@@@@.@@@@...... +@@...@...@@@.@..@@@.@@@@@@@@@@@@@..@.@@.@@@@@@@@@@.@@.@@.@@.@@@@.@.@@..@@@@.@@.@@.@...@.@......@@.@..@.@@@@@@.@@@@@@....@.@....@..@@@@..@ +@.@@@@@@@@@.@.@@@@@@@@@@@@..@.@@@@.@@.@@.@.@@@...@@@.@@@.@@@@..@@@@@@@@..@@.@@..@.@@.@@@.@.@@@@.@@@.@@@@@@.@@.@@.@@@...@@@@@@.@@@@.@@@.@. +@@@.@@@@@..@@@@@@.@.@@@@.@@...@@@@@.@@@@.@.@.@.@@.@..@@..@@@@@@...@@@@.@..@@@..@@.@@@.@@@@@@@@.@@@@@@.@@.@.@@@@@@@@@@@.@.@@..@@@@.@.@.@.. +...@@@..@..@@..@@@@@@@..@@.@@@...@@.@@@@@@.@@@@@..@@@.@@@@@@@@@.@@@@@@.@.@.@@@@@..@@@@@@.@@.@@@@.@.@@@@@@@@..@@@@@@.@.@.@@.@...@@@@@...@. +.@@@....@.@.@.@@@@.@@@@@@@.@@@@.@.@@@@@@.@@@@.@@@@..@@..@..@@.@...@@@@@.@@@@@@@@.@@@@@@.@@@@@.@@@@@@@..@.@@@@@..@.@@@@.@@@@..@@@@@.@.@.@. +..@..@.@..@@@@@.@..@.@.@@@@@.@@@@..@.@@@@@...@.@@.@@@@.@@@@.@.@@..@..@....@@.@.@@..@.@@@@.@.@@.@....@.@@.@@..@..@@..@@@@@@@.@@.@.@@@@.... +@..@.@...@@.@@@@.@@..@@.@@..@@.@@@@@@@.@@@@@@@.@...@..@@@@..@@@@.@...@..@@@@.@.@@@@.@.@...@.@.....@.@@.@@@@.@@.@@@@@@@@@@.@..@@@.@.@@@@.. +@@@@.@@@@..@.@...@@@@.@.@@.@.@..@.@@@@@.@@.@@@.@@.@@....@.@@@@...@@@..@@@..@@@@@@@@@@@@.@@@..@@@@.@@@@@@@@.@.@@@.@..@@.@.@@@.@@@@..@@.@@@ +...@.@.@.@@@@@@@@.@@@@@@.@@.@@.@.@...@...@@@@@..@.@@@...@@@.@@@@@.@@@@@@@@@@@.@..@@@..@@.@@@@@@@@...@@@.@@..@@@@.@@@@.@@..@@@@@.@@@@@@..@ +@@..@@@@.@..@.@.@@@....@@.@@@@..@...@...@.@@..@@....@@.@@@@.@@@..@...@@@.@@@.@@.@..@@@..@..@@@@@@..@@.@@@@@@@@@@@.@@.@@@@@...@@@@.@@.@@@. +@@@@..@.@.@@..@@@@.@@@@.@@@@@@.@..@@@.@@.....@.@@.@@.@.@@@@@.@@@@..@.@@..@...@.@@@@@@..@.@@..@..@@@@@.@@@@.@...@@..@..@@.@@@@.@.@@@@@.@.. +@.@..@@@..@@.@@@@@.@@@...@@@@@@.@@@@.@.@@@@@@@@@@@.@@@@.@@@@@@.@@@@@....@@..@@@@@@@...@.@..@@@.@.@..@@@..@@....@..@@@@@.@@@@@@.@@@@.@@@@. +@@@....@@@.@@@.@.@@...@@@..@@.@.@@.@@@.@@@@@@@@@.@@..@@..@@@@..@@@.@.@@..@..@@.@.@@@..@@@@@@@.@@.@.@@@@@.@@@@.@@@.@@@.@.@@.@@@.@@@.@@@..@ +@.@@.@@@@@@@.@@..@@@@@@..@@@@@@@@.@@@@.@@@..@@.@@@@@@@@@@@.@@...@@@@.@..@@@.@@@@@@@@@@@@.@@@@@@@@.@.@@@@@@.@@.@@@@@@@@.@....@.@@@@.@@.@.. +@.@@..@@@@@@@.@@@@@@.@..@@.@..@.@@@.@.@@@..@@@@@@@@@@@@@..@@@@.@@.@@@@.@@@@.@..@.@@.@.@@.@@@..@.@@@@@.@@.@@.@@.@@@.@@.@@@@@..@@..@.@.@@@. +.@.@..@.@@@@@@@@@@@@@@..@@@@..@@@.@@@@@.@@@.@@@@@@.@..@@@.@.@@@@@@.@.@@.@.@..@.@@@@@@..@..@.@@@@@@@@@.@@.@@....@.@@.@@@.@@@.@@.@@@@.@@@@@ +...@@@.@@@.@.@.@@.@@@@@@@.@..@.@@@@.@.@..@@@@.@@..@@.@@@@@@@@.@@@.@@@@@...@.@@.@..@.@@@@@@@@.@.@@.@.@.@@@.@@@@@@.@...@..@.@@.@..@@@@@.@@@ +@...@.@..@...@@@.@@...@.@.@.@@@.@.@@@@.@@.@@@@..@@.@@@@..@....@..@@...@.@@@@@@@@.@.@@@@@...@@@...@@@@@.@.@@..@@..@@@.@.@@@@@@@@.@@@@.@@@. +.@@@..@@.@@@@.@.@..@@@@.@.@..@@.@.@@.@@.@@@@@@.@..@@..@@.@@@@..@@@@@@@@..@@@..@@@@..@@@@@@@@@@.@.@@@..@@@@...@@@@@.@@@.@@@@@@@@....@@.@@. +@@@.@@..@@@.@.@.@.@@..@@@..@.@@@.@@...@@.@@.@@@@.@@@@@@.....@@@@@@.@@.@...@@@.@@@.@.@@@@.@@.@..@@.@@.@@@..@..@@.@@@..@.@@@@.@.@@@@..@.@@@ +@@@.@@@@@@@.@@@@@.@.@@@@@@.@@....@@@.@.@@@@..@@.@@@@.@@...@.@@.@@@.@.@...@@@.@@.@@.@.@@.@....@@.@@@..@@@@..@@@@@.@@.@@@@@@@@@@@..@@@@@@@@ +@..@.@@@@.@@@.@..@..@@@.@@@@@@@.@.@...@..@.@@@..@.@@@.@@@@@.@@@@@@@.@@@.@@....@@@.@@..@.@@@.@.@@.@.@.@@@.@.@.@@..@@@@.@@.@@.@@@@@@@..@.@. +@.@@@.@@.@@@@..@.@@@....@@@.@@@@.....@@@.@@...@....@.@.@@...@@@...@.@@@..@@@@.@.@@@@@@@@.@@@@.@.@..@@.@@@.@..@@.@@.@@.@@@@...@.@@@@...@@@ +.@@@@@@@@@@@@@.@@@@.@@@@..@..@..@@@.@.@@.@@@..@@@..@@.@@.@@@@@@.@....@.@@@@@@@@@@.@@...@..@@..@@.@.@@@.@@@@@.@@..@@@..@@.@@@.@.@@@...@..@ +@@@@@@.@...@@@...@.@..@@@@.@..@....@@@.@.@...@@.@@@..@.@@...@.@@@@..@@.@@@.@@@.@@@@@@@@@@@@@..@.@@.@@@..@@@@@..@@.@@.@@@@@@@@..@.@@@@.@@@ +@@@@.@@...@@@@@..@.@@@@..@@.@.@@@@@@..@@@.@.@.@@@@..@@@@@...@@@.@@@..@.@.@@.@.@@.@@...@.@...@..@@@@@@@@@..@@@....@@.@.@@@@.@.@.@@..@@@@@. +.@@@.@@@.@@.@@@.@@..@@@.@.@..@.@.@.@@@@@@@.@.@@..@.@..@...@.@@@.@.@@@@..@@@..@@@.@@@@@@@...@@...@.@@..@@@@@@@@@.@@@@@@@@@@@.@@@@@.@.@.@@@ +@.@@@@.@..@@@@.@@@@@.@@@@@@.@@@@.@.@@.@.@.@@@@@@@...@..@@@@@@@@@@.@.@@@..@.....@@@@...@....@@@@@@.@@@@@@@.@.@@.@.@....@@@@...@@@@..@.@@@. +@@@@@.@.@@@..@@.@.@@..@@@.@@@@@.@...@..@@@.@@@@.@@..@@.@..@...@.@@@.@.@@@.@@.@.@..@.@..@.@@@..@.@.@@@@.@..@@@.@@@@.@.@..@@@.@@@.@@@@@.@@@ +@..@@@@.@.@.@@@@@@@@...@@@@@@..@@@..@@.@@..@@@@@..@@@@@...@.@.@@@@..@@@@@..@.@.@@@@.@.@@@.@@@..@..@@@.@@@..@.@.@@@@@@@@@@.@@.@...@@@@@@@@ +@.@@.@@.@..@.@@@.@@.@.@@.@.@..@@@@.@@.@@@@.@@@@@@@.@@@..@.@@@@@..@.@@@@@@...@@@.....@.@.@@@@@@@.@@.@.@.@@@...@@@@@@@..@@@@.@@@.@@@@.@@@@. +@@@@.@..@.@@@.....@@@.@.@@.@@@@@.@@@.@@@@...@@.@.@.@@@@..@.@...@@@@@@@@@..@@.@@@@.@@.@@@@.@@..@@@..@.@@@@...@@@@.@..@@@@@@.@@.@..@@@.@.@. +@@@.@@@@@.@@.@@.@@@@@@@@.@@..@.@@...@@.@@..@.@@@@@@.@..@.@@@..@@@.@@.@@.@....@@......@@.@@@..@@@..@@.@@@...@@@@@@@.@....@@@@.@@@@..@.@@.. +@@@@@@.@....@@.@@.@@@...@@.@.@@@.@.@@@@@.@@@.@..@@@@@@.@..@@@.@@@.@..@@.@@@@@@..@.@@@.@@@.@.@@@..@.@@...@@@.@@.@@@@@@@@.@@@@.@..@@@.@..@@ +@@.@.@.@@@@@@@.@@.@@@..@@.....@.@@.@@@.@@@.@@@@@@@@@@.@.@.@@@.@@.@.@..@@@@@@@@.@..@..@@@@@@@@@.@@@@@@..@.@..@..@@...@@@@.@.@@@..@@@@.@.@@ +.@@@@@.@.@@@@@@@@@@@@@.@@..@@@@@@..@@.@@@@@@@@.@@...@@@@@@.@.@.@@@..@@...@@.@.@@@@@@@@@.@@...@@@@@.@@@@@..@@@@@@.@@@...@@@.@@@@@@@@@@.... +@@@@@@.@.@.@.@@.@@.@@@..@..@@.@@..@@@@.@@.@.@.@@.@@@@@@@@..@@@.@.@.@.@@@@.@......@.@.@@@@@@@..@@@@@@.@..@@.@.@.@@..@..@@@.@@@@@@.@@@@.@@@ +....@@@@@@@@@@@@@@@.@@..@@.@@@@@..@...@.@@...@@..@@@@@@@@@@@@@.@.@.@@@.@.@@.@.@@@.@@@@@@@.@@@@.@@@@@.@@@@@@@..@@@@@...@...@@.@@@@@@..@@@. +@@@.@@@.@.@@@@@.@@@@@.@@@..@@..@@@@@..@@@@.@@...@@.@..@..@@@@....@.@.@@.@@@@.@....@@@.@@..@@..@@@@.@@@@@..@@@...@@@.@@@@@@@@@@@@.@..@@@.@ +..@.@.@@@@..@@@@..@@@@.@@@.@..@@.@@@@@@.@@.@.@.@..@@@@@.@@@@..@.@..@.@@@@@.@.....@@@...@.@@@@..@..@..@.@@.@.@@@.....@@.@@.@@...@@...@@@@. +@.@@@..@@....@..@@.@@.@.@@.@.@.@@@.@@@@@....@...@@@.@@@.@.@@.@.@@@@@@.@@@.@@.@@@@@@..@@@@.@..@.@@@.@.@@@...@.@.@..@@@@.@@@@@@.@.@@...@@@@ +@@.@....@@@@@..@@@..@.@@.@@@..@@@@@@@@@@@@@@@....@@.@@@@.@@@@.@.@.@@.@.@.@@@@@@@@.@@.@@@@@@@..@.@@@@@@@.@...@@@@@@@....@@@..@....@.@@@.@@ +@.@.@@@@@@@@@.@@@@@@.@...@@@.@@@..@@@@.@.@@.@@@.@.@@.@@@@@.@@@.@@@@.@@..@@.@.@@.@@.@@@.@.@@@@..@@@.@@@.@..@@@@@.@@..@@..@@...@@@@@@@@@@.@ +.@@@@@@@@@.@..@@.@@@@..@..@@@@@.@@...@.@@.@.@@@@@@@@@.@@@@....@@.@@@@@...@...@.@@@@@.@@@@@@.@..@@..@.@@@@@.@@@@.@@@@.@@.@@@.@@.@...@@.@@. +..@@@@@@@.@@@@@@@@@@@@@@..@@@.@@@@@@..@@@.@@.@@@@@@@@@@@.@.@@..@@@@@.@@@.@.@@@@..@...@@.@@@@.@@@@.@@@@@..@.@@@@.@@.@.@.@.@@@.@@.@@@..@@@. +@@@@.@@@@.@@.@@@@@@@.@.@@@@@@.@.@.@.@@..@@....@.@@@@@.@..@.@@...@.@@@@@@@.@.@@@.@.@@.@@...@@@.@..@@@@@@...@@..@@@.....@.@.@@@@@@...@@@@@@ +@..@..@@.@@@..@@.@@.@.@@@...@@.@@@.@@.@@@.@...@@@@.@.@@.@@@.@..@@@@.@@@..@@..@@@@.@.@..@..@@.@.@@@.@...@@@.@@@@@@@.@@@.@.@..@..@.@@@@@.@. +@@@@..@@.@@@@.@@@@...@.@@@@@@@.@.@@.@@@..@@.@@@@@@@@@@@.@@@..@.@@@.@@@@..@@@@.@@@@.@..@.@@@..@..@@.@@@@@@.@..@@@@@@@...@.@@.@...@.@.@@..@ +@@.@@..@..@@@@@@@@@@@@@@..@@@@@@@.@@@@@...@@@..@@.@@..@.@@@@@@@@..@@.@.@@.@@@@@...@@@@..@@@@@@@@@@@@.@@@..@..@@@@.@@@@@@.@@@@@@@.@...@@@@ +@@@@@.@@.@@...@.@.@@@@@@@.@@@....@@@@@@@..@@..@..@@@@@..@@@.@@@@@@@@@.@@.@.@@@.@@...@@@.@@@.@@.@@@.@..@@@@@@.@@@@@@@@@@@...@.@@@@@@.@@@@. +.@@@@@@.@@@@..@..@@..@@@.@@@@...@@@@.@..@@.@@@@.@.@.....@..@.@@...@@@@.@.@..@@@@@@@..@@@@@@@@@@@@@.@..@@@@.@.@..@@@.@@@@@@..@.@@..@.@@.@. +@@@.@@@@@...@@@.@@@@@.@@@@@@...@@.@@.@@.@@@@@@@@.@@@@@@.@@@@..@.@@.@@@@@@.@.@@.@@@.@@@@.@@@@@@@@.@@@@@@@@.@@.@@@.@.@@@@@@@.@.......@.@..@ +@@@@@@.@..@...@..@..@@@..@@@@.@@..@@.@@@..@@.@@@@.@@@@@...@.@@@.@@@@..@...@@@...@.@@@.@@@@@@.....@@@@..@.@@@.@@@@@@@.@@@.@.@.@.@@....@..@ +@@@..@@@.@..@@@@....@.@@@.@@@@.@@@@@@@.@@@.@@@.@@.@@@.@@@@.@@@@.@@@@.@@..@@@@@@@...@@@.@@@@@@@.@@.@.@@@@@@@@@@@@@@@@@@@.@.@@@@.@@@.@.@@@. +@..@@@@@@@@@@@@@.@.@.@@@@..@.@@@@@@.@@@@..@..@@@@.@@..@@.@@@@@@.@@@@.@.@@@@@.@@@@@@.@@.@@...@@@@..@@@@@@@@@.@@@.@@@@@@@@@@.@.@@@@@@@@.@@@ +@@....@..@..@...@@@@.@...@@@.@@.@@@...@..@.@@..@@@.@@@@@@...@.@@@.@@@@@.@@@@...@@@@.@@@@.@.@@.@@@@@@@.@.@..@@@@@@@@@@..@.@@@@.@..@@@@@@.@ +.@.@@@@@@@@..@@.@@@.@.@.....@@@@.@@@@@@..@...@@@@.@.@@....@.@@@@@.@.@@@.@..@.@@@@@@@@@.@@@@@@@@@@@@.@.@@.@...@@@@.@.@..@.@@@@.@..@@.@@@@. +@@@@@.@.@@@@@@...@@@@@@@@@@@...@...@.@...@..@@.@.@@@.@.@..@@@@@@@@.@.@@@@@.@@@@@@@@@.@....@@@@@@.@@@@@@@.@@@@.@@@@@@@@@...@..@@...@@.@@@@ +@..@.@.@.@@@..@@@..@@@@@@.@@@@@@@@@.@.@.@.@@@......@..@@@@.@@@.@@.@@.@....@.@@@...@.@@@.@@@.@..@...@@@@@@@@@@@@@.@.@@@.@@@@@@@@@.@@@@@@@@ +..@@.@@@@@@@@@..@@...@..@@@@.@@.@@@@@@.@@.@.@..@@@@@@@@...@@@@@.@@.@@@@@.@.@@@.@@@@.@.@.@..@@@@@@.@@@@@@.@.@@@@....@@..@..@@..@@..@@@.@@@ +@@@.@@@@@@@.@@@@@.@@.@.@@.@@@@..@@.@@@@@@...@@@@@@..@.@@@.@@.@@@@@@@@@@@@@....@@@@..@@@.@@@@@@@@@.@.@@@@@.@@@@@@@@.@@@@.@..@@.@.@.@.@@@@. +@.@@@@@@@@@.@@.@@.@@@@@..@.@@@.@..@....@@@@.@.@@@@.@@.@.@@@..@@..@@.@@@@@@@@@@@@..@.@@@@.@....@@.@@@@@@.@@@@@@.@.@@@@@.@.@@.@@@@.@@..@.@. +@.....@.@@@.@.@...@.@.@@@@@@@@@@@@..@.@@@@@@@@@@@@.@@@..@@@..@@@.@@@@@.@@@@@@@@@@@@@..@@@@.@..@@@@..@@..@@@@@@@@@@..@@@@@..@@@@.@@@@@.@@. +.@@@@..@.@@@@@...@@.@@@.@@@@@@@@@@...@..@@.@.@..@@@@@@@...@@@@@@@.@.@....@.@.@@@.@@.@@@@.@@.@.@@@@@@.@...@@@@.@@@@.@.@@@.@@.@@.@@@@@.@@@@ +.@@@.@@@@@@@@@.@@@@..@@@.@..@@.@@@.@@@@@..@@@..@..@.@.@@@....@@@..@.@.@@.@@.@..@@.@@@@.@@@@@@.@...@.@@@@@.@.@..@@@..@.@...@.@@....@@@@@@@ +@@.@.@@@@@.@.@..@..@@@@.@@.@@..@@@.@@.@@.@@@.@.@@@...@..@.@@..@@@....@..@@@.@@@@@@@@@@@@@@...@.@@..@@@.@@...@@.@@@..@@@@@@@......@.@@@@@@ +@.@@@..@@.@.@@@.@.@..@.@...@@.@@..@@@@@..@@....@@@@@@.@.@.@@@.@@@@@@@@@@@@@@.@@.@@@@@@.@.@@@...@@@@.@@..@...@.@@.@@@@@.@@@.@@@@@@@.@@..@@ +.@.@@.@@@.@.@@@@@@..@.@.@@.@@@.@@@@@...@@@@@@@@.@@@....@...@@.@@@@.@...@@@.@.@@@@.@@@@.@@@@@@.....@...@.@@@@@..@..@.@.@...@..@@..@.@@@@@. +@@@@.@@.@@@@@@@@@..@...@@@@@@@@..@@@.@@@@@@@..@@@.@@@@@@@@@..@@@@@.@@@@..@@@@@@@@.@@@@@@@@@@@@@@@@@@@@@@.@@..@@@@@@@@@@@@.@@@@@.@@@@@.@.@ +@@.@@@@@.@@@@..@.@@..@.@@@@.@..@@@@.@@@@@.@@@.@...@@.@@@@@..@@@.....@.@@@@.@.@@@@@@.@@..@..@@@@.@@@.@@..@.@@.@@...@.@@@@.@@@@@...@@.@@@.@ +@@@@@@.@.@.@@@.@@.@@..@@.@@.@@@..@.@.@..@@.@@@@@@@.@.@@..@@@@@@@@@.@.@@..@@@@@@@@.@.@.@@@@@@@@@.@@...@@@.@@@@....@@.@@.@@..@@@.@.@.@@@.@. +@@@@@...@@..@.@@.@.@.@@...@@..@@@@@@@@@.@@@.@@@.@@...@@@@.@@@.@@@@.@@..@@@@...@.@@@@.@.@@......@@@@@@@..@@@.@@@..@..@@@@@.@@@.@@.@@....@@ +@..@@.@@@@@@@@....@.@.@@@@@@....@@@@.@.@@@.@.@@@@@@@.@@@@@@@..@@.@@@.@..@@@@@@.@.@..@@@.@@.@.@@@@@@@....@@.@.@@.@.@.@@@.@@@...@@@@@.@@@.. +.@@@@..@@@@.@.@@.@@@@....@@@..@.@.@.@.@@@@@@@@.@.@.@@@.@@.@@..@@.@@@@.@..@@.@@..@@@.@.@.@..@@...@.@@@@@.@..@@@@@.@...@.@@@@@@@@@@.@.@@..@ +.@...@.@@@...@@@.@@@.@.@@@@@@.@.@@@@@...@@@@@@@@@@@..@@.@@@@@@...@@.@.@@@.@.@@@.@@@..@@@@.@@.@.@@@@.@@@.@@@@@@@@@@@@.@@@@@@@@@@@.@@@@@.@@ +@.@@@.@@@@@@.@@.@..@.@@.@@.@@..@.@@...@@@@@@@@.@@@..@.@.@.@@@.@@.@@@.@.@@.@@@@@....@@@.@@.@@.@@..@@@..@@@@@@.@@@@@@@@@@@@.@@.@@@@@@@@@.@. +@@.@@@@@@.@.@@...@@.@@@@..@.@.@@.@@@.@...@@@@..@@.@@.@@.@.@@@@..@.@@@@.@@@..@@.@.@.@@@@@@@@@......@@.@@@@@@...@.@..@.@@@@@..@..@.@@.@@..@ +@@@@@@..@@.@@@@..@@@.@@@@@..@@@.@@@@@@@.@@@@..@@@@.@@@.@.@@@@@@..@@@....@@@...@@@@@.@.@@@@.@.@.@@@@...@@..@@..@@@@@@..@@.@@.@@.@@.@@@.@.. +@@@...@.@@@@@.@@..@.@.@@@@@@@@.@@.@.@.@@..@@..@@@@@@@@@@.@@@@..@@.@@@@@@@@@.@.@@....@@@@.@@@@@.@@@..@@@@@@@@..@@@@@@@@@.@@..@.@@@@..@...@ +@@@@@@@@.@@@@@@@@@@@@@@....@..@@.@.@@@.@@@@@@@@@@.@@.@@@@@@@@.@....@..@@.@@@.@...@@@@.@@@@@@.@@@@..@@@@.@@..@.@@.@@@@.@.@@@..@@@@@@@@@@.@ +...@@..@.@@@@@@.@@@..@.@@.@@..@@..@.@@@.@.@.@@@@@@.@@@@@@.@@@.@@@@.@@@@..@.@@@.@...@@.@....@@@.@@@@@@.@@..@@.@@@.@.@@.@.@.@@@@.@.@@.@@..@ diff --git a/data/05.in b/data/05.in new file mode 100644 index 0000000..6bd4df3 --- /dev/null +++ b/data/05.in @@ -0,0 +1,1186 @@ +526859759527027-530903630595569 +337717265601364-339932517390269 +545089130701660-551315254037624 +265340758984424-265575034323910 +535666190180626-539145128075457 +386605490441654-388235518620336 +423385835903709-429362477775364 +385422312069308-387482365060968 +434044543571446-436862530762822 +74539175245033-74965026800509 +44742834774095-49788566839375 +169325580980735-169325580980735 +51096063282052-58069810607487 +413831533189103-418855927945058 +345108105344543-345108105344543 +152972771418166-157847734707755 +473542571141034-473542571141034 +163332456696368-169325580980734 +212003517607639-214869625712644 +449422525487063-450200051002750 +261670526650013-262440699650690 +74741731842149-75516371691095 +330696283998213-331441633999421 +155332627201732-157847734707755 +221424275196848-226582162731252 +185110300693630-187480772832070 +61259034661183-66300828124476 +387682788292227-389423736589549 +172627015874313-172627015874313 +328351285395449-329186851393270 +76935545176649-77246349234441 +447679536351056-448300285004653 +445931407503662-446738636362543 +74741731842149-74965026800509 +325030752126721-325307177049343 +51096063282052-58069810607487 +268721591471779-269567971629259 +325307177049343-326079640025058 +143950356130919-150045971248704 +74965026800509-75282791772663 +389897253020406-391705775049295 +115257626485094-119825119608074 +262440699650690-263258821311777 +303326443780325-309778019953555 +324006623088441-324803214222802 +214869625712645-219687352009875 +74741731842149-75516371691095 +486023914936757-488383792976889 +255699980018513-258638065060368 +244144300283045-250254757936557 +447054779884888-447679536351056 +138623035943557-140532733682903 +495128475253867-499627639192062 +137109076099544-139192904222278 +84823805692192-84823805692192 +76184775908061-76526569575995 +328573162315353-329186851393270 +78975410069823-79297309342198 +203999107078355-209959476084522 +71048133574867-71224981434097 +326079640025058-326492203266235 +264205992279007-264777158310814 +78975410069823-79297309342198 +266806993504195-267617703756286 +41435986472992-49788566839375 +328351285395449-328757544594044 +514473766850364-522190439991386 +134886241737792-136876939866215 +445048023282396-445422366122154 +74086643854183-74201106808166 +447432062609659-448300285004653 +123299276583068-129191624367722 +104553001600323-108264011748468 +384648243704164-386134193460852 +373065356805237-379036834653996 +314569442718959-320690039031516 +182474871809317-190357924983170 +261969441682143-262724659026248 +326825319523574-327111177200274 +323792484896236-324564823916166 +298104594330519-298104594330519 +264205992279007-264988203098396 +556449139785432-560985248309694 +364605116527462-369636344155803 +131169731336234-133070929279775 +473542571141034-480117303920638 +133294646120336-135548956899024 +447432062609659-447679536351056 +267617703756286-268210926825714 +388982779453909-390666196636237 +505888731224463-509395631718812 +324291684030447-324564823916166 +354840910211902-354840910211902 +439498119985012-441599388338418 +395764878304186-398546022034136 +78125231572360-78438080522025 +233178547149952-235392211723458 +286209479232129-290909979710873 +92901806075037-94370211494480 +269746707446841-270234297073801 +314569442718959-320690039031516 +403593165069019-406618284406689 +264777158310814-265340758984424 +265818866337594-266173551138968 +514473766850364-522190439991386 +445422366122154-446271702604406 +261504223942745-261670526650013 +282155152581726-290909979710873 +92901806075037-98353857372767 +876959427385-6095613039337 +66300828124476-66300828124476 +263258821311777-263676106541399 +238975774736713-240656006363157 +467693150640920-471889906803212 +84823805692193-89778326071387 +193046801974199-195253899078724 +453499176096814-459167269547006 +266806993504195-266989657357129 +235691954395235-238191029089354 +450638449273608-451258272106192 +73728752882731-74539175245033 +73213232189848-73728752882731 +231343953590244-233647858318470 +505888731224462-505888731224462 +334245722489446-337717265601362 +321979107816896-322237339538591 +267843115061924-268048354630500 +382108200796202-383795987338234 +264553989145130-264988203098396 +203999107078355-204981053333115 +225543169935325-230621450714858 +150045971248704-150045971248704 +303326443780325-307566456021470 +20823869782492-24242219350925 +484555826473307-490671592155327 +123299276583068-123299276583068 +234704202249576-236633431964463 +445726395953078-446271702604406 +322479352862291-323094367137729 +237052415716315-239630973612728 +6095613039338-8344216900761 +78975410069823-79603858391383 +77246349234441-77857012518728 +24242219350927-27302014389310 +432578376622242-435100617624369 +270076811269101-270234297073801 +406618284406690-410155078190630 +73213232189848-73599406441595 +11931341791595-19096571173991 +272544678526630-272544678526630 +464682877110249-467693150640919 +437767002432237-440318677568155 +13338172612994-17035003871112 +459167269547006-459167269547006 +345108105344543-349593319406890 +495128475253867-497702389322273 +111530580288200-116611338253415 +323307649883441-323481330026974 +383576464093848-385269089618536 +323094367137729-323307649883441 +354840910211903-358907736018584 +132288517885616-133920930183998 +77546108821305-77857012518728 +195253899078726-198269026577572 +272544678526630-280444084418547 +267843115061924-268472056678149 +327294753606500-327791538574437 +376256304367713-381180338444018 +244144300283045-250254757936557 +76935545176649-77546108821305 +38493578143191-38493578143191 +32443494862657-38493578143190 +548542430017005-551315254037624 +136223761063811-138130914347965 +426116260725312-431745276529134 +443262168910577-443389872554598 +392926261978689-401728376263719 +418855927945058-418855927945058 +539145128075459-540094781235090 +329395527364410-329630251416021 +560985248309695-560985248309695 +172627015874314-178533696643087 +449933231063294-450638449273608 +295448358471196-298104594330518 +436168534750376-438504463596282 + +180086939927003 +40733628163329 +127074402685910 +217586853716193 +398704644604332 +356494447362786 +55798379556191 +550279657988313 +274408711733777 +209693154684097 +339144099251985 +97440925981534 +480626159274469 +278292443214607 +252722568845779 +243767583482572 +216287310134190 +537852062799782 +97366057428139 +68641963659766 +393265591015044 +447471031129666 +432291285204556 +406414985871864 +355963323979281 +404663640199906 +504230519964806 +496970724520833 +297401754415977 +397401227187795 +15134505081919 +236078765468439 +464082394921719 +316016931121348 +385207894673937 +311824547384981 +46896807010428 +557150998624511 +21672517591943 +442250656828104 +112735871434295 +407244153990437 +48947182190562 +449812853075269 +383825115677289 +264821764505609 +540018784889011 +487670117561172 +202610310184536 +302076269169964 +490660955645510 +84429515071984 +321793876995185 +448454628948493 +162436685409090 +169290200565465 +366016156718271 +371723487136841 +240302930577789 +479322113445420 +130116852509746 +470729675232859 +10773402609144 +83155972455713 +327196871819358 +314278104508 +464719809632993 +231737586190946 +100064058223931 +91292648897161 +68151081287212 +322927901015629 +85308656847270 +74061872176478 +241262760633204 +364747488291568 +497050259671788 +165440513696719 +493667459801350 +32804038430674 +176653825104804 +342256963642872 +424750157870467 +305743477088069 +380313213527829 +139925750335408 +7461195993769 +451250559477352 +355922555905590 +405612102334636 +44528394492760 +486957961131686 +5933057683885 +100890561017385 +36553895537687 +275658301762969 +102982933248926 +460833339483075 +365390254232828 +200388222368788 +4080828331986 +453466965321318 +311793272572799 +201185924307180 +110158483491123 +1926672532549 +88256278625614 +490140997772694 +439925005382430 +496539292663706 +499842873039684 +335118376912826 +472405052778201 +427150179960111 +187678898669475 +471752215052541 +98249204784658 +334287444083834 +481471870229193 +536247802371093 +515810391880761 +475143690867391 +36095672271415 +468986235724185 +207645454601193 +58216209383010 +306408560416530 +332589331296960 +344815948663466 +253225342483131 +192379324508022 +205041867209064 +42182574152729 +21783753249598 +243961245401837 +264628010033765 +226885883598640 +266918768448957 +57224804162118 +470023018336599 +125888632255425 +16062898046406 +338504131940327 +157084812913240 +73996690370233 +288865138243624 +138035654637621 +272920703015545 +317086120013178 +113501778662642 +492897689067663 +322641147836653 +319864910460553 +480781443736573 +269637135603857 +19031496902059 +104412970391443 +305677366811019 +216018963784371 +318783957000926 +269153130376418 +208660229216921 +525937290835806 +296391647922961 +461897113603834 +468974553507268 +392709654411183 +271482424434166 +107822694948785 +233931207952267 +150956071945987 +190880503739708 +476479640765129 +336453689669561 +315960938270733 +194895369816294 +238499629495861 +196887899839442 +510576176857915 +125188646300178 +344979241793090 +377661323597976 +356160748979813 +425903995573918 +189968374992773 +375068442365904 +415726984077665 +354282606362586 +193460494603986 +446961584207735 +389775552480432 +232795466471337 +36382469671660 +182282701880162 +505492835610788 +452646628239264 +401458016995133 +508290808439968 +415747466026244 +384395577917739 +351233804310207 +364880083078296 +513967955037700 +20321477222489 +372164351787784 +416386698128982 +182577131996738 +127682621762625 +289956379701465 +371283155949534 +404854234024016 +80415552557262 +513922946136157 +394143635541241 +97379157037763 +390362637630909 +508183524782149 +329103619884086 +548408280771332 +256976346360116 +334606065828286 +159508290235467 +108458743365086 +172935960365513 +405068523514464 +441137400892079 +166223946926991 +455418916354801 +71763333526910 +388172378401588 +222216028630112 +254197755195057 +365278381119332 +138279663950053 +427149938880560 +390972387177297 +498081804859514 +510501994428487 +113477785982841 +297373701992651 +399252710002906 +52317657036596 +88244630234437 +511531627540280 +351157941636556 +44071635792815 +88178418330474 +351444776477382 +64031006790331 +407375720380188 +85431660279218 +283448267491404 +470567594397631 +12636398260894 +496062089407800 +335300891346675 +14055755804652 +164636123386073 +223877317160898 +170978066269005 +471856700196669 +540230479905012 +310439796893537 +333603311532803 +277015260057498 +207343947632463 +356544289982032 +356589813431144 +561782960471036 +291088456475038 +397579412826113 +73481064724752 +318414494788701 +539225404513089 +416899640225817 +245851600187476 +46796031802508 +339062912172552 +394207101712733 +260747750827868 +473629840171145 +351912516097164 +123589994740127 +186907301836207 +286729677369778 +37549201798281 +17470202280935 +324008087498039 +28454390517097 +42958294070835 +86472566616497 +285952329758217 +104971942324544 +147576989817511 +358087587002657 +225588592614262 +282868513667956 +117539567599020 +262997073550997 +224921435272795 +56097045692082 +182334973498595 +268636867533238 +213241752611361 +35757095442060 +373599637831268 +393340791925669 +378902095568044 +71539490173739 +231636410582895 +52772639211549 +49512673765901 +354756188152540 +272872696183026 +148256578522734 +98357021715820 +379213466071122 +144485326474670 +326853216054389 +24302452049437 +368926552885022 +53157699426161 +223252757973208 +145768883269011 +63984466333448 +486488620866874 +229817765192291 +269329133914365 +560643946706657 +45631044212263 +435881451766287 +475506642028082 +484449661040771 +214879754728988 +475846503322504 +315021216693226 +121670524069030 +255869768870221 +551487586837792 +99151888673216 +216938746148020 +428208979764630 +355861765404303 +96567936950185 +73763280873931 +543532495179726 +504883610624906 +168104688076724 +299886219816730 +468688264606576 +51114038718439 +73232826595794 +560844106555924 +528187755269791 +405013284368940 +372272743540676 +510872843752361 +308956286619773 +108062811221199 +492737062954364 +87057682265211 +409574090984899 +297195784398408 +405819403388680 +397019663959028 +300340029883062 +140447096833460 +148860660078177 +138549628180799 +266521107265976 +62119873645612 +201426183100004 +245373109201316 +179156417536913 +233000961331062 +468317772850143 +104622408121681 +462268888334062 +266897639279911 +232122415377959 +399358507065697 +519715462820253 +537396644402202 +315342672824150 +17458516392420 +476516458648077 +542175192198795 +114684671476813 +294329658000003 +230065183778063 +11091313673529 +252982912198070 +457714398481216 +93261338735878 +419352128964825 +287241947869771 +347394448186685 +544339173877131 +154642223944071 +451881260577833 +498485484833025 +70269541369073 +389531747729764 +247623970417555 +278090222984930 +495260232380161 +1796658906391 +89909721194190 +44414193344340 +428867954231103 +380723851620857 +125779928073442 +143830854096433 +74985740515683 +26081441166565 +391430367095056 +2315403381146 +170049626270324 +29933592120839 +367210956340849 +487503370733624 +149556625637249 +71474550901116 +58532624335778 +391512285425179 +1976901800262 +365889209823392 +352493835513713 +538489397266924 +391774502228528 +107912308788051 +297284817649478 +524395646656730 +105804016214167 +425102022387743 +248126689238251 +12845836680112 +401354058916741 +422650816362899 +448782811603402 +450130863961451 +28444510039950 +439928408892220 +386969510790166 +413003563168209 +189357377211129 +266329397244920 +306678868252396 +202556358297386 +29197822918375 +523404118798372 +514743187095168 +109997483844012 +444168000082978 +51166010972968 +105937953336595 +493949593382735 +497606938014892 +425274716592484 +199692749300840 +295581329555282 +548691682594286 +507348624412331 +147988690058545 +15385149104033 +133587454071326 +470561709300533 +408741972703238 +536139981367946 +115860804701381 +35046443317617 +41800912894466 +135940824218968 +561205866469050 +53019107389618 +224330451603974 +155638610646722 +466598740604004 +206782537834746 +75044288942928 +373159599320624 +556466715599520 +435487900673746 +27792055641968 +122834568000287 +537474343030525 +97802812515795 +450343142972945 +406573689125472 +389951127448389 +197610762414973 +419637881694753 +498280691598791 +401671850069432 +416275367018246 +311125592481373 +448194800639308 +489976726106726 +523570949348042 +517499967610276 +189958183415769 +327459021894553 +466244510126665 +111211836540661 +157230149001111 +87844291927566 +467904235011676 +80287823062198 +348861419302428 +491111164669109 +389634766805643 +314295169605756 +276368235090753 +495545722734527 +67902381745435 +242115525859709 +114111724934298 +469500569192573 +320310192296601 +29874628168249 +491145530220945 +461756560074159 +553178608998745 +257734948035978 +410595241312785 +47014118517108 +85887090927583 +168008245034474 +341699174288167 +62700190440509 +80514439015283 +262923637938809 +476828597930447 +117114975894028 +141222099047454 +213204262431176 +333731934015430 +547513919069064 +432228236551047 +305006291038386 +23195912037758 +111397501301462 +265721678156741 +334171411462080 +328138987648478 +285083913080604 +372627917438197 +436551595277855 +261238865832227 +256628805176352 +140082131903517 +430800747432808 +512384762440519 +305719969048839 +81247377799428 +404573325829238 +539347735333761 +55017328954120 +524392377584400 +558742929293152 +214036268285596 +335479954861711 +231656277609897 +7356249988889 +561623815119105 +204561728469306 +89753385986841 +241061871502465 +237331073489731 +209306400300127 +535886920906910 +487863077175940 +279121387728077 +304305988746903 +256162355457343 +124968497527425 +208203466427061 +308440444743475 +19610416937958 +82096714517257 +14107085919654 +264268258409850 +127565107963024 +440773901472531 +350403652454580 +352643089656417 +164841031250705 +139847058224221 +278831480111407 +401211216619670 +65054043908274 +228513486826986 +39994922207692 +202498504718872 +140341941042160 +498121444613583 +291672881707627 +58697149761687 +344525598776893 +81130372666807 +393547263272272 +3789912822292 +418422907550720 +454058564750427 +240302028252160 +293302067224320 +274531171223584 +546379445036220 +99494919728600 +147698005671861 +338330908139322 +268425682 +287578643357117 +468024632486301 +1816285813150 +308030898367180 +251650939718762 +344641184499443 +133702415687140 +400921497919075 +333647393238043 +252744477120170 +372208108718382 +21365751173033 +143828821745143 +436983133092760 +468087228202584 +497577347573258 +235500891763763 +428017817091875 +252795264586170 +478543689651637 +456037400020679 +141824643881688 +68748876525538 +120140200506043 +348178477121189 +258994892233713 +193403186964410 +231854878431912 +53510633081725 +198180536678162 +230390743437557 +246617871909615 +183589896313267 +484597717883139 +143225710304927 +54167565379231 +511414600938862 +228988732791474 +27674422139098 +179291144397234 +377265148166115 +13532278947565 +521274655831987 +388001790570464 +438894502063575 +273062236780603 +83830966026115 +212989031631302 +350674866851047 +24130970012051 +507265333414265 +154175197477995 +185364321937177 +4609352773689 +517398478602970 +82818484137481 +277591046695574 +44287729879953 +457350026885455 +477224454580729 +349699412221202 +495588116948996 +427728136357579 +485422157950167 +115091596893505 +517405238722489 +477878270245154 +150982170853767 +15745676947658 +307834164716645 +80887801161752 +61518634037382 +371430898086257 +229176782230688 +465358051562534 +277019731174471 +277534618999980 +209677664137437 +346840032096922 +485948859148338 +423782591352969 +400402208725589 +435850482049640 +45890360146169 +523536273395980 +547577878933842 +517943758115732 +247190325521228 +357513584347323 +460115775503864 +355852926204443 +67964287801538 +278040201494 +498273850881043 +154239702440239 +535041740810168 +294175991065965 +279854237234858 +513000861416579 +143484521851692 +34999110268861 +537458097463203 +545266248693058 +13318842537326 +386358298599072 +372898912263453 +126336514695165 +255551598453509 +32432309491596 +481393597450957 +334570437875806 +505941580319968 +457957769698147 +329400996863322 +191363605131452 +501454830691944 +524452742692657 +271212520287799 +548386690030504 +346659530451873 +238821056708012 +336686042021894 +350443484209819 +473549644540709 +285863611902687 +37592842807602 +167590746559381 +415190814396302 +52981196872491 +73789428457346 +293945623342186 +400780474996595 +354720897094398 +266513513445365 +217015534815445 +506007129236809 +450766747443141 +557346445572566 +510327000875385 +210995792215490 +416687170853167 +219020000161186 +479109065506436 +397687015924712 +534138532235602 +348174826069768 +231441063620699 +42293332775269 +93646079750283 +225680439325933 +342677060717478 +27245124029826 +312456863798154 +326360933765079 +469692952777048 +254256860361771 +454813530541875 +504035021904460 +511900155566299 +211499411846255 +511521614711544 +36386039988022 +534096847922224 +164413297902242 +159343618718330 +258029063159215 +437269810042783 +268373053969492 +325998335971995 +468458951961072 +179703166014808 +313365884139441 +313083790979262 +193620469472245 +416506390869415 +373339050083468 +343363703864687 +53526524106325 +387499216558418 +561179613103339 +257417109060083 +384378935731967 +259422559802147 +429905144459475 +258643662387418 +389222246908817 +263517350845879 +453937759418803 +37778276716748 +513008756665626 +47744308650085 +72225912946602 +335033484514564 +109358377329870 +274271410684417 +98987811426473 +427785248003421 +505108463745133 +94890528749850 +85482210472326 +257617311247582 +234500343774189 +298557256373367 +269553028007764 +437386629039591 +34049405175385 +280909249965498 +278172877045295 +522761683454472 +353043325834797 +225240832000354 +77815930355179 +387217542415370 +64989212096061 +12594033194625 +213884386374569 +240213835231068 +153861873431163 +57569934674978 +446590726269302 +109133190581458 +218651021007652 +520593832405909 +529673094813230 +377613481683180 +237987639594252 +497617024214549 +75784201932327 +136357910446594 +178327812587675 +170980318576778 +435414631244579 +221855535528452 +429078280942811 +492540191951421 +440170260411480 +76060919802154 +549965409083598 +338425874890873 +85795169052947 +207356499258773 +278120521395403 +247594159938387 +135243798100281 +550956896476703 +116716066708954 +331192599215256 +260648357770142 +115615214687780 +117401495808973 +376369482247324 +145333479071461 +1414611182801 +95074443822755 +196506711870068 +174050849202895 +432208804254188 +403906088119479 +400062051099988 +265062558440660 +181485227552435 +524309707544026 +456992094785645 +82947861376917 +63729789353186 +87651241066164 +419322996216513 +188379976369587 +188441800595011 +168454855929888 +134933364832248 +417796185066108 +70158938020125 +192658609384576 +286646464479316 +141857464509376 +197659399787323 +500999862977777 +487920295904169 +184242067840507 +377309313988629 +67704625461259 +149589975190867 +441052235080832 +454423066826598 +468528553432709 +534338905893316 +560008113182954 +354429247051444 +510821695195714 +21554209059567 +458668694329716 +156134642951289 +217769843850073 +470706147166448 +183763316419477 +70077041320007 +355093316160801 +121486272615081 +547267635716380 +53318326766490 +260729929168281 +545576265282933 +65844763856147 +475026964237242 +109427025448913 +100761937438852 +457030011955175 +282942161911251 +409575749035558 +230157170575100 +80148446075288 +133083206674327 +140801002500583 +85465169672254 +280954589756357 +382382209764158 +109942047467470 +435868451014802 +376553056402967 +381044666308508 +167482956588471 +224824597412949 +259543380160025 +293545755607973 +416718645649769 +425590696076147 +524050409010057 +518634517631409 +297544921235547 +426163989813382 +164948447883169 +335003186330089 +182947234060910 +515788879091642 +352693548735196 +74385677442718 +1023027994873 +431188950493408 +304241614716768 +311764246401322 +548578754870822 +463917966270522 +430227492769034 +110880337159623 +399600058149199 +253745908151743 +36331897370369 +223700273656749 +293280192213807 +164692838787103 +237296277515680 +153355145499145 +286522715028754 +275280254471957 +509443240490063 +147311084770444 +105422877567174 +358194918163054 +325188906906586 +275644237431946 +547480980775980 +482850952821991 +547262955041986 +24416126976153 +280646938956566 +25845750009615 +370326866522758 +522675849586166 +225744812319755 +240614018076188 +30136068209847 +479461007161497 +499264400524064 +515288973196098 +165580583437830 +88279198022661 +63763897431232 +408826166062805 +527208080502853 +459584741797532 +436480083996508 +262192945917036 +315046791298056 +452113241311054 +83892878322667 +259995284341805 +15072832010637 diff --git a/day01.sql b/day01.sql new file mode 100644 index 0000000..4266119 --- /dev/null +++ b/day01.sql @@ -0,0 +1,35 @@ +with +instructions as ( + select + case when line[1] = 'L' then -1 else 1 end as dir, + cast(line[2:] as int) as amount, + row_number() over () as id + from read_csv('data/01.in', header = false) file (line) +), + +positions as ( + select 50 + sum(dir * amount) over (order by id) as abs_pos + from instructions +), + +clicks as ( + select + dir as click, + row_number() over (order by id) as click_id + from instructions, generate_series(1, amount) +), + +all_positions as ( + select 50 + sum(click) over (order by click_id) as abs_pos + from clicks +) + +select + ( + select count(*) from positions + where abs_pos % 100 = 0 + ) as p1, + ( + select count(*) from all_positions + where abs_pos % 100 = 0 + ) as p2; diff --git a/day02.sql b/day02.sql new file mode 100644 index 0000000..fb627fa --- /dev/null +++ b/day02.sql @@ -0,0 +1,39 @@ +with +bounds as ( + select + unnest(string_split(trim(content, '\n'), ',')) as f, + string_split(f, '-') as bounds, + cast(bounds[1] as int64) as low, + cast(bounds[2] as int64) as high + from read_text('data/02.in') +), + +candidates as ( + select + unnest(range(low, high + 1)) as num, + cast(num as string) as num_str, + len(num_str) as len + from bounds +), + +part1 as ( + select sum(num) as solution + from candidates + where num_str[: len // 2] = num_str[len // 2 + 1:] +), + +part2 as ( + select sum(num) as solution + from candidates + where exists ( + select stride from range(1, len) as range (stride) + where + len % stride = 0 + and repeat(num_str[: stride], len // stride) = num_str + ) +) + +select + part1.solution as p1, + part2.solution as p2 +from part1, part2; diff --git a/day03.sql b/day03.sql new file mode 100644 index 0000000..b4c9d13 --- /dev/null +++ b/day03.sql @@ -0,0 +1,60 @@ +with recursive banks as ( + select unnest(split(content, e'\n')) as bank from read_text('data/03.in') +), + +banks_1 as ( + select + (select arg_max(i, bank[i]) from range(1, len(bank)) r (i)) as i1, + bank + from banks +), + +banks_2 as ( + select + i1, + (select arg_max(i, bank[i]) from range(i1 + 1, len(bank) + 1) r (i)) + as i2, + bank + from banks_1 +), + +banks_12 as ( + select + 12 as i, + bank, + 0 as r + from banks + union all + select + i - 1, + bank, + ( + select arg_max(j, bank[j]) + from + range( + r + 1, + len(bank) - i + 2 + ) m (j) + ) + from banks_12 + where i > 0 +), + +part1 as ( + select + sum( + cast(bank[i1] as int64) * 10 + + cast(bank[i2] as int64) + ) as solution + from banks_2 +), + +part2 as ( + select sum(cast(10 ^ i as int64) * cast(bank[r] as int64)) as solution + from banks_12 + where i < 12 +) + +select + (select solution from part1) as p1, + (select solution from part2) as p2; diff --git a/day04.sql b/day04.sql new file mode 100644 index 0000000..fc358d0 --- /dev/null +++ b/day04.sql @@ -0,0 +1,95 @@ +with recursive + +raw as ( + select split(content, e'\n') as content from read_text('data/04.in') +), + +lines as ( + select + string_split(unnest(content), '') as line, + generate_subscripts(content, 1) as row + from raw +), + +grid as ( + select + unnest(line) as ch, + generate_subscripts(line, 1) as col, + row + from lines +), + +rolls as ( + select + row, + col + from grid + where ch = '@' +), + +accessible as ( + select + pos.row, + pos.col + from rolls pos, rolls adj + where + adj.row between pos.row - 1 and pos.row + 1 + and adj.col between pos.col - 1 and pos.col + 1 + group by pos.row, pos.col + having count(*) < 5 +), + +remove (row, col, present, level) as ( + select + row, + col, + true + from rolls + + union all + + select + pos.row, + pos.col, + pos.present and 4 < ( + select count(*) + from remove adj + where + adj.present + and adj.row between pos.row - 1 and pos.row + 1 + and adj.col between pos.col - 1 and pos.col + 1 + ) + from remove pos + where + exists ( + select + pos.row, + pos.col, + count(*) as c + from remove pos, remove adj + where + pos.present + and adj.present + and adj.row between pos.row - 1 and pos.row + 1 + and adj.col between pos.col - 1 and pos.col + 1 + group by pos.row, pos.col + having c < 5 + ) +), + +removed as ( + select + row, + col + from remove + group by row, col + having bool_or(not present) +), + +part2 as ( + select (select count(*) from removed) as solution +) + +select + (select count(*) from accessible) as p1, + (select count(*) from removed) as p2; diff --git a/day05.sql b/day05.sql new file mode 100644 index 0000000..f372ec1 --- /dev/null +++ b/day05.sql @@ -0,0 +1,64 @@ +with recursive + +raw (line) as ( + select * from read_csv('data/05.in', header = false) +), + +ranges (low, high) as ( + select + cast(spl[1] as int64), + cast(spl[2] as int64) + from ( + select split(line, '-') as spl + from raw + where contains(line, '-') + ) +), + +ingredients (id) as ( + select cast(line as int64) + from raw + where line <> '' and not contains(line, '-') +), + +part1 (solution) as ( + select count(*) from ingredients + where exists ( + select + low, + high + from ranges + where id between low and high + ) +), + +merged (low, high) as ( + select * from ranges + + union + + select + r1.low, + case when r1.high < r2.high then r2.high else r1.high end + from merged r1, merged r2 + where + (r1.low < r2.low or (r1.low = r2.low and r1.high < r2.high)) + and not r1.high < r2.low and not r2.high < r1.low +), + +part2 (solution) as ( + select sum(m1.high - m1.low + 1) from merged m1 + where not exists ( + select * + from merged m2 + where + (m1.high <> m2.high or m1.low <> m2.low) + and m1.high <= m2.high + and m1.low >= m2.low + ) +) + +select + part1.solution, + part2.solution +from part1, part2