diff --git a/advent-of-code-2023.csproj b/advent-of-code-2023.csproj
index 6ad3f80..552f986 100644
--- a/advent-of-code-2023.csproj
+++ b/advent-of-code-2023.csproj
@@ -77,6 +77,8 @@
+
+
diff --git a/inputs/25.txt b/inputs/25.txt
new file mode 100644
index 0000000..90d48a8
--- /dev/null
+++ b/inputs/25.txt
@@ -0,0 +1,1262 @@
+pcf: vqq glr rpx qcm
+qkb: ccc lxr ppx
+vnm: frl
+scx: czr
+zqg: lbj xkk
+qvs: zgv vfq pqp qbl rpt zcq
+sxm: rgj
+vrd: hbb trd fgh
+dbh: crj hjx bkj
+psx: sxc
+dsx: bjf zrx pld
+dqn: kxm
+lst: fzr
+mzv: gcq bkh mqg
+lzm: fdl jpf qxt
+xfs: zdh thc rxd cjm
+lqk: zth
+mbn: skp pxv zgv bpn
+kzg: mgc vnc zdt
+rdl: pql ptt jfm hsp zvl hhx
+nbj: tqk qhx
+rzr: cfk pdh
+bdm: ppx jcr tgp mhl
+glr: bzl snq drq prc
+qds: glk jvn ntx
+kqq: ftz blr hlr kvd
+fsd: hbs
+czr: rms
+sgv: kzb tvs qxx
+mdz: rtk txr cqr
+nvc: vsr kzb
+bkp: msz vpn fzr
+fbq: txq sbn
+xgq: dng xlh cqb
+qsq: vvr vqz xpv nlm
+dhk: bqm fvg cjm
+khs: dqq tfb
+blm: lqb rcq dmr knp
+vfb: tjm ltb lcd vss xvg
+psn: hrb hzt dhk hdg
+dtl: jgv
+tgf: rnk
+jlj: rhq vmq scj fsp klg
+nbt: khg dvg plf
+cng: gsf
+mrr: bht
+pbf: pxl zbf
+zpm: tfc jrm jfl crs hsp
+sfh: pmh jfl nhf vct
+fdl: jtj
+qtl: kvn glk cjv lrd
+pmv: mpj mmp
+qfv: nph klg kxm cmj vxd pqx
+mjn: jfk pql
+prc: nzf rjt
+qnc: kbt nth
+cml: gzg lpz pxs tvd lvf
+nxl: mgg tnt msz
+rqp: bkj nbg
+cfb: slr bmv mnf tgp bfm
+sff: flz nlq jtc rkz
+jzk: txm
+tnt: szr ljs
+jhm: sms gll
+tjm: vvz qsf
+psh: qsf
+ftf: rkn rcz ddg hbx
+jfl: rll
+pxp: dtc nqq cqb sjd bdg
+hfm: xzs krk jpj hbs fvg
+fvk: gnv bjh
+rxt: dlr sbg
+qhk: dqp tzz smc rxh
+tbf: tdl
+vms: sgl
+mps: fth kqs pnr fbq
+srg: ndj gdq
+vzk: ggd dms vdh zdt
+dkj: drk zmv kkb sjs
+hzg: drn cmp gxf mkr
+pqm: gmf krk vvc ldb
+dpb: sdj bgh plm
+pnq: fxt mxg
+mlc: brv hld mzz
+cxx: vrx zcx xxv
+crj: lxr vgl
+stj: tsm xxv jpj ccl
+zcl: fvz ntx
+dpd: brv sms frx
+snm: lnn bqx nqm kdr
+vdx: fbm cqr fpg pdh
+qjv: vhd vms
+xhm: lhz kkv lcq
+zgk: fkc vmb vjj vtg jqs
+ftr: crq ntc bsr
+rst: cxm
+xxm: mld
+qxj: nhf dns
+lhr: znp
+tfx: lgs skp fdl dsb
+mzr: qps
+kjt: kzb xbb
+tzs: cfk sdg
+xqr: lbl pdv
+bjf: vsz lft
+xnh: tfv lnz
+tqk: kzn
+tht: dld kqh cng rlc
+tsd: kng ndm
+thn: gkg
+xth: bns zgv fth bfg kzc
+fjx: kxm
+smx: tjq pmv nbj hdj
+zdt: xtp zkp hpf
+zcm: njk vtl fvk
+jbj: nrg bng jqs vgl
+czm: fdr zbf dkt
+rfk: rbm grf zqb
+pxn: cjv jfl
+zxp: dvt qvk cfv pst
+lrc: dpp jcr ldh bth
+djx: hpg dlm
+gvv: rlc ppn gjp mdv
+ddb: xgx rft
+qrx: ckt bdg mmh
+jxk: psh dbp cbn dvz
+bxk: mrq jzk cpv pqh
+vvc: nqm ngd gzm
+drd: tzj jgc nzf rxx
+cdn: jhh pxl xdc lgk
+zjz: ldr cfb bfm
+kkb: qnn dmp
+ctv: tfb gbh
+cvd: rhq rcn hcx
+gxb: dfn vzc
+jtv: jjz bqm
+dfb: fqz zmr pnr nlq
+ptr: dfv lqm
+dvg: clp
+qgz: qzq tlk jzt kqg
+qct: lbv gxh vdh
+hpg: hck
+dlr: jvj
+jgv: mmh
+mmp: hck
+krk: lqb
+ksr: ggd fzr dsm
+ncb: rxt kqs hhx mnp
+zcx: knr mkm
+zfr: gxb dsm xqg
+hpr: txx gpg
+bzf: dvm
+qjp: qsh
+qgh: sjd cpv chv pxl
+vnk: pxl sqs glp
+gkr: vtg bnj bng tdf
+sxq: ltl ksb plm
+lcl: njk zjl tsm
+vkq: xzj dvm
+brz: drl str
+nlk: jnc
+zpj: rjz psh zvt
+vct: frl pql
+tfp: zsm rsl jtc smt
+drx: xzk dzt
+hrb: kzs clp
+vbs: pbf zzh qlp
+hqc: crc pcb kml
+qld: hqf cxm rlc vkd
+zjb: mft mnc xpv kjc
+plv: zfr fqq fgq xkh
+brr: fbb mdz dpd hrb
+qzq: rhd zgn
+zgb: fft ksj jcn
+qgr: cmj bsr trc
+kdr: qns fsj rpx frx
+nqk: mtv zpj pbg nvh xvv
+kzz: blv gzm
+pld: pqx rcn
+pvm: qnd
+sfq: gkt
+nqb: mkm kzs
+dpl: qxf jvn fbq qxj
+lrn: jcr
+gkg: nsz
+gkz: rlf cbh vcr lzm
+ktf: hbz ncs qnd knm dmm
+lhl: mgc qnx
+xjk: mqg hlh
+fzv: dbk tdf
+gxh: dns
+kfh: dsb
+xqg: flz
+ztz: jfv thn
+kpv: hgx tqt vhq pxx nmz
+bbt: lgs jhh
+xnj: dlr mbz
+nzl: ggb lsx
+zqz: psx
+dlb: brz rgm
+jjf: bzf qfh cdf xbt
+pzr: nqq cqd sfk
+nzf: mdv
+kmn: fvk lbm
+pnb: jcn
+lkh: qkl gjp fkc txr
+fft: bmt
+tpn: vmk mjn qtv
+hbb: chn
+tbx: ckf rfq szr vmz
+fqv: mbg ncs vjj cxm
+dgb: qxj trf gxt nlm ntx
+gmf: hkd rlc
+hzh: scj bxz mrv xgf
+zmm: rcl
+hpt: ltt lft sjg qpl
+czv: vms lqm zlb
+fsk: nvc ztm rqp drl
+rqq: fxc nxk vbs
+ggb: fsq kcv
+kjb: pkd
+dfn: qnx gqf
+htg: dzv sxx krm
+ptt: zpp
+sns: rmd vgf qbq
+fcj: cxq
+tkb: ldh pgx ccl
+fml: rcz znp cqs
+flg: pst glb nfs tvs jhm vck
+jgk: bmt vdv mvr qxx dcv
+bqv: chz gfh znd
+zzh: ljs qsf
+chp: jvj
+hhg: cnh
+dgl: rdc gzm xjh lrn
+czf: dvz ntx
+ncr: bbx
+vhk: pvm mkm khg
+pls: mcd knm
+bmv: sbz gjp ncr
+cxp: kzs lrn rdx pjg vgl fkl jpr ltx
+scm: zbf vvr
+rtz: jrr gdv
+ndn: tgh
+ccc: jtr
+rmq: ldb dlb htj
+dbp: qxt kxh
+dmk: bbx hmj
+fhq: hbx jvj mfh vnv
+shg: btd
+pdl: gzm
+vfg: bbt
+jjm: kxh xbl
+znq: vcn cvc lgn
+bcm: jsz rdg rlx
+bdf: tqg xmc
+vqz: chp vfq
+jdl: rll xzz bkh kdl
+ljf: kpd pfk scx kdk cxd
+zqs: shg hxt vsc ctp
+fks: svd vgn mrq
+xgx: vvz
+xxv: lzx
+lbj: zbf
+znd: tfv
+npm: nxz qxx dxb
+jqp: czv ngd pgx txv
+cgf: frn rtz qgh rfk
+rhq: jcr cdc
+fhx: zpp tbx dbc
+nnb: ldr
+rpv: gxd dtd ctg sfh
+fth: jzt rkn
+qzx: pmv mtj pgl jzk
+xhk: qtt qml vnm fqq dlm
+hkx: jgl xqg nzn fpf
+xbh: jcr brv zcm dvg
+zpf: vzv mdn ksr fcj dlm
+nxp: bhs zlj
+ksb: fnx qnd
+zhz: hxt rjz txq msz
+gkx: pbp xtp lfx ptt
+lgp: vfg mqg qnx ctn
+hjh: sjs flz
+hjx: pvm
+glm: xgf pch gll pvx
+lpz: gxf ptt kfz
+fdr: qlp jtj llk ptv qff
+tqp: jkt sfs
+btx: cqp bpf kpv zkd
+zrh: jsv nzf qvk jjz fpg
+hms: xxm
+vzg: cdc jnj
+qkp: plf pbd cmr mhc
+vtc: gkt zjl
+psv: tdd fqq
+kvn: jkm pgv
+nbc: tfv rdk
+cqd: dpb btc
+jgl: rzb
+lll: rcl
+skf: xgf zpq
+mcd: tqg lkm
+kqh: bjh xbt hbz
+ldn: zmm tsd ksj
+jqq: xrv
+qfh: qkb txv
+mpt: fft hgq jjf ltl
+cqk: nbj lgk chz rkz rtb
+htj: jqs kzb
+jlx: tgf ddb
+prq: knm dzv rdc jsv
+sgh: njr dzv cxx khs
+plb: zjm jsl vfg zqg
+rnj: hrj dng
+dzb: zlb xqp qvk
+txf: pgl
+sxt: mdv qvk vbc
+jqm: jcr lbl qjv
+qcq: rst cdf msm vhd hzt
+dnr: sgl qgr rdp snl grb pbd
+hmx: bpv bjh mhc vtl
+xdk: qnn mgg glk fjc mft
+ldh: txr
+chl: hhj pnb pzr bpx
+ckf: qff kfh
+cvk: cfk pjg fzf mfg
+zln: zzh xxm
+ggx: pbd rqp
+vsr: bqx bhs
+rjz: nrs cxz
+zkd: grf gfc
+bbx: qbc
+rkp: vct
+vtg: qsh
+gzb: dct rmk xmp znq hkl
+lzx: pdh
+jzt: qds lnz
+mcp: ckf xlc lrd hbc jkt
+brl: qbc cfk
+xmp: czk zvg
+ddg: lhr
+sbz: gpm
+djv: tzx xbb kns fsp
+qhb: xnx kxh vsc hxz
+qff: cqs kmj qml
+hck: zvg
+kqd: bhs
+lmv: zfm mlk zrg
+dng: zgn
+xdj: pvm csq jcn
+xmm: qml vpn bkp gqk dns
+ggg: cxq
+mdr: qlp tcp
+hkl: lhr ccv
+mhf: vtg qvx dbk vsz bng
+gpg: xrv jfq
+mfl: psd mgg vvr gfx
+csj: nqf svb jtr
+hlh: txq
+bjd: mtv fdr nmg xlx
+fpk: pmh thn tnt
+dqf: ltl cbg mfg chs
+fzf: sjg czr
+bmt: krm
+brv: bbf
+fsp: jvb svb
+mfd: ltl pqx
+fvz: dtd
+chn: rzt
+bqk: hxz lcd jrm brh
+xkh: lql pxn mlk
+ltx: qkl blv
+mxc: ddg cjh ggd
+hxm: mpt tcm rxh fmn
+nbx: zsh jxf nxr rsd
+dll: xzs qdm cpq vbc
+rtb: qzq tqt bdg
+trd: zsm
+sfl: szh gdq
+rjp: tcp svd
+npk: bzh btc kjt hhj
+jrg: ltt skf hbq nbt
+txd: zfm rll rzt ccb
+sqb: str
+mbz: gxd
+brk: qdr sck dqq
+ptl: fzr
+pdq: ljs zrg clk
+bpf: sfs
+xss: tch smk fjh pnj
+gfl: fsn zcq jzr hxt
+bqn: xbz jrr hbn hxz
+fxd: rsq
+tln: rjt vxd tkg qkx
+pml: hrt dbk rmt vmb
+rqv: zgb rxh
+bht: xnj
+jfk: brh
+zcf: chn xkk flz
+jsl: dcq msz gxh
+vsh: mbg dqn ntc hzm lft
+sms: bbx xbt
+tpb: rgl rzm vcr sct
+zqj: blv zlj vmq
+lch: jnj mcd kzz
+ctm: ggg fgk sns
+sps: pdl mbg
+zcj: qpv
+lkm: vkf
+mvr: dfv vsr zrb
+thq: btk gbb fks bns
+hrt: fcs fck zgf
+pvr: rdk tpn qmk xlx
+xxq: hld mpb
+qmk: mpj
+fdh: qlb pns vmq
+xlc: gfc qpv qps
+qmz: kkc ptx cdp vgh
+jvn: nkr
+vdv: thc fbm
+jfj: vvz txq xnj czf
+ztc: vxd kqd zrx rpn
+sxx: ndm
+hsc: ggb rzt hkl hgd
+nmg: jqq rjp
+jhh: zvt
+gqk: rqq znp xrv
+rdc: zmm
+mxg: nqm
+fxt: krm htj dgr
+xvg: fgk fgn jzr hms
+pxd: pzv xnh hbb
+gbh: fsj
+pns: nrg
+qvd: rms tvs ksh rsm
+xrk: pgl rkp clk tjm zsm
+fnj: nkr lpr qxs jgl
+rnk: qps
+kqg: ptb
+fpd: gvt rst nlk mnf gzp
+tdf: vzg fsd
+flx: rgm
+jvr: mcl mbz
+rgn: rzm cdp zzh sfx
+dcj: zpq
+mcl: glk bcx
+qtf: rcl snh
+grb: nff
+bjh: fdq
+dld: cfb pvt ptc
+chz: thx jqq
+djt: rzb svd lgk hrj bbt mdb
+tzj: ldr nlk
+hqx: jvb
+qtd: pns pvx zks qjb
+plk: pls txv pgb zlq
+dcq: hvb xqv
+mst: dcq cgq mnp hlh
+fss: dvm
+lts: smt ppl nnl lhl
+fvc: nhf nnl ctm clk kmj pxd
+dcv: bsr vjj jcr
+jbb: rjz rnk njb
+rnf: qml
+blk: tbf sbn sqf kfh nzg rnj
+pzv: kqg fnn
+vlc: flx ltx qvk hmv
+xqp: xmc
+jhg: zps drq nxz
+lkc: dvm zxh dqf thc
+khg: gpm bzl
+xpv: gls
+nhh: lck
+mbc: pld rpx tkt bxp gvv
+bff: gvv xjm nqf btc
+rnb: qft vlf cdc bzf
+bpv: bdv mdx
+kbt: mdn
+tcm: snl
+tfv: sjd
+btc: ngf
+ntm: dcj mfg
+jdv: fsq xxm rdg pxn
+fkt: cbn grh
+zsh: sdj brx
+fjc: nzl
+shj: kzn gfh qnn
+jtc: jfv
+nsh: pzr nhh kpd xqp cvd
+xvf: txm gxt
+bxz: brx snm
+pcb: qxt tdd
+xjh: bqx
+rdt: kcv frn zmv
+dtq: qfb pkl chs nmf
+nqf: zbk sfq
+dkt: cjv qmk
+nqq: hbs prc
+rsd: klg kxm dmk
+llk: lvp tbf tqp
+rpx: svb
+pxs: qxs vhp mrc lxg
+hgn: xmc lzx rms
+pst: vkf lqm
+bxp: dxb
+lss: tkb lqg dhg zpv
+glb: vrx scc
+chv: zsm
+vcl: dtl jgv dmg nnz fdg
+kfm: mjp vlg
+fhn: hxs rdb ckb jqz
+lsx: zcl
+msm: bdv tch
+qfs: fgn tbf gdv
+hdg: mkj vkq pnb dld
+fvd: xhp chz tvd htd
+bcp: psh fcj brh
+qvx: qpl zpq nxr
+gsr: hgn gzp qvk lkl tlt
+mxz: fmn mql vsb krt
+rcz: vrg dcq
+kdl: rfq tvd lgt
+zrj: gdt kfz xcp mhx jfk
+nms: lnv gkr jvb hbq
+gns: snl vvc gzp mjp brx
+zks: qkl
+gmt: gqf
+dhg: dpr
+xvm: zzc
+jlq: jrm
+vjs: tpr cxn rdx lmh qdr bkj vhd rmq
+gbb: tmm dbc
+rxx: tlj gbh
+kjp: zjl dpd brl
+jgc: tzx pgx pdc
+nxk: vzc xkk vmz
+ktb: xbb ndj xvq dbz pzn
+ctn: sxc jrm
+lvv: rcl
+qbl: grh zsm
+cbh: gqz gsc
+pvt: xnb bzh
+cfv: rsq
+qfg: xlf hbn nsz fbz
+mlp: ggh xxq zbc dvt
+qgg: btd rtr mtv
+btd: gxd
+dxs: lzx ftz njk mnf
+lqg: ztm jxf
+qtv: vcr
+hvn: lsx jkm vvr nzd
+xzs: mzz fxd plm
+zzc: kqg fxl
+tlk: jdq rhd jhv pbp
+hld: ppx
+gcf: pvx
+szr: rdg mft
+pdc: dsx krk snq qqf
+rzm: mnc
+mnp: jfv xqv
+tdd: vvz
+tpr: hld czv vzq
+kml: nzd rhd
+skn: xvf tqp sss
+tlv: nxq
+cvg: ksq zls lfx rft
+lxh: ntv mkr jhv hgd
+jxr: svd czk nzn mlk htd
+pxx: cfm szt jhh
+njj: dcj kqh vzq
+hlr: pqx
+jrm: fdb
+sct: clk zmv pqp
+cnd: xlx tgh
+rsl: fsn
+fpf: zkp
+sbq: hmj hhz grd rgm
+vgs: fsj zxh rpn kfm
+qns: mpb
+cmj: jnc
+nbh: fsq
+kzc: gxh lfc tfc
+rsm: kcx jtv
+ccv: dbc
+bhq: fbz pmv szt
+shz: kkc zqs svn btd
+zpk: rft vfq tgf
+jpf: ptv
+tpt: lnv cfb nxp krm
+dfh: dpd trg vrx xjr
+jbm: xtf cdf zrx xsv
+vxj: htc bzx qsh
+nvk: tgf hbx dks shg gcq
+rjq: rhc jqm cnq
+bgh: pvx str
+ght: lcd gqg tqk rcc
+hhx: txf
+psg: gkx cqs flz
+hbc: jtc qnc
+nvx: svt rtk qnr nqb
+qbv: zps pgb
+xms: cbn zpj
+kdj: rtb qbq tlv
+vsd: mfd pvt dhg
+xcf: drq
+qqb: pqm thc jtr crq
+cxn: jjd svb fcm
+lql: svn pbf mft mdr
+zlx: pld cng dbh tsc scc
+jck: mmh
+sdg: xmr ppx
+cqp: rnf nnl cbn
+gtz: mxg ccl xpk qdh zcx
+zpp: sjd
+dfz: fxn cgq tdl mdn hfp
+hzm: ltl
+zrs: pgb
+xrm: mql dzt hbq
+hbx: tqp
+kxq: rmd rmk rgl
+tqg: hbz
+vjj: bqm
+lcd: dmn
+hvl: gxl zrg xpv gfx spt
+vrh: qtf zks zsd vkn
+rbv: kzb gsf
+zbk: rdc
+ldb: fkc
+vqq: gnv zmm lkm
+mkj: sjg
+dbz: gtf pnq
+jsp: sxg hzm zkt bpx jpj
+snq: rms cxm
+ndc: vmk znd zln rdk
+xkq: jkt vsc fdb
+tph: psg ddg czm lgn
+sxh: bzx pcf
+rmt: mql qtf ldb cqd
+qrk: bth hmv csq bxp rqp
+nph: nld
+pnn: znr zvt lxh tlk zmv
+gpt: lgs znp hlh mrq
+xqz: nqt clp tcm
+gfh: sxp jfq
+xpf: ctg kfh fvz dkd
+vzt: tcm hbq lck tzz
+mrq: xqv
+cxd: cmj xxq xxv
+dvt: ctv
+mrv: htc lcl sps sck krt
+crs: dfl mlf xgx
+xbl: frh fgq rft
+xzk: rbv qcp
+dbk: gpm cbg
+kfl: zlj gnv
+ngk: sck sqb scx zcx
+xvq: qkx drq lqm
+nlf: jnj
+fgn: xnx
+ktr: qnc hjh fxl
+xmh: zcx ptr fjx mtl
+rkk: crj lft fjx hgq zqj
+pzn: zpq sfl bzh mjs
+hxs: frn
+vvl: hxt hms hxs mnc
+mlf: frh
+qcm: kpp dqn
+bkh: qmf
+thx: mfh gsc
+zvm: xhk kmj zqb
+clc: njj tgd mdv dcj
+xmg: csj xrq xcg bnb
+tvq: cgq cfm
+rln: ggh ksh hjx brk plf lrn
+tkg: kpp zks
+vqh: xjh nqb qbv vlg
+bdg: fnn
+mdb: jqq pql vnk
+cdp: rcb gfx
+xgh: sbd jfq
+bpj: plf kxm rhc sms
+kls: jlx sqf fxc zln
+clk: chv
+nmz: dvz pgv
+jpr: nbt
+mpf: nth ccv htl scm
+pct: qjp fjh rqv vrh bzf xdv
+rfq: cmp
+kns: nqm
+pgx: tgp grb
+gzp: qjp
+nxq: vcn
+gzh: tzg tlv
+hbd: csq zpt sxg bgh
+fds: xrb zjb vcn gqz
+fbm: ppn fxd
+zpc: zkt zbc ncs kmn
+jxq: dlb rjq ccc jtr
+jjd: nff tsc qkz sfk
+str: sjg
+zlb: mql hqf jpj
+gbm: hhs vpn gzg ddb psv xvm zcj
+vmk: ndn jcp jlg bns
+hgx: qtv fgq zqz cfm
+dmg: vhp jtj
+lrd: svn nbj
+bng: qsh
+kcx: lll ndm
+hsp: mmh
+xcp: hcs bhq qhx
+dkq: fzv cnq npm fjh knp
+nmt: kdc qcm
+dlg: qds fqz gvn vld
+mnc: vnm
+rvt: jcn trc jsv bdf
+xcq: dks rsl kzn gvn
+zmx: lst ckf czf
+hfq: zmx qfs mgc sqs
+gcc: tqk lks rkp
+nnp: drl pvm
+mbg: drl
+cqb: pnr
+rpr: rhc hgn fck zrs
+ppl: njb bht tvq
+pnp: tsc rxd zgb szh
+bfg: sjs
+ntc: tzx dxb
+xpk: ccc gcf rtk
+rgl: sxp hjh frh sss mnp
+tdl: jck
+vkt: fxm hjx vdv hlr pls qcp
+tkh: kjb nqt tsc rvx
+hrl: rtr sfx vpq tdd jvn
+nmf: ztm ndj
+zxh: pdh xcg
+zjm: cpv cxz
+dmm: rtk
+mrk: xdj pdh bdf sdg
+rdb: zcj kxg
+smk: hqx mpb
+zbc: gjp nlf
+plf: dxb
+gll: mpb xcg
+dmd: ckf vnv gcd nkr
+nxr: mxg rvx
+tch: frx
+fbb: fsp qcz sbz tsm hmj
+ztm: cdf vbc drx
+bpn: rcb rdb ckf
+dpp: qcz trc vtc
+gdt: qml ggb
+vmb: xjh dzt lvv lqg bbf
+nsb: svt zxh ngf
+jfm: ptm nrm rmk
+jdm: lhr bpg mbh chn mtv
+gcd: bqr lgz
+jhv: drn tqt
+srd: kqg rzm fxc
+trc: txr str
+sgr: khs scc dkq kng
+gqg: hrj djr dks
+slr: qjb sgv tkg
+ddv: smc ntm cpq xqz
+bmx: lck gcf qpl
+zrg: rnk
+rdm: bfg fnn ctk vfq
+hzt: qcz vkn
+lfc: grx
+nfs: jpr vmb
+fjh: ntm
+zpr: hrn cnq mlc rhq
+hrn: pkl vgl
+msj: qdr nsb qnr hxc jxf njz
+dmr: pkl kzb
+njr: dfv pnq
+bjk: lvv dbz hrt rjt
+qqm: vkf ggh glb nff
+nzg: vpq zls
+gxf: cgq
+bpx: jcs bbx
+dtm: fds htd flz xbz
+mld: fsq
+pbd: jjz
+ptm: vrg sbn jdq kjc
+jqz: dkt sdf bcm sfx jvr
+fbz: ssl xlh
+vkb: vpn hkl qtt vpq
+khb: mrr vcn tdj gxb
+drn: bns
+jjv: jtc ptb gxt shj
+qxs: rcb
+qvl: txf ckt nkr htl vqz
+pcp: rgj lgt frn jbr
+jcp: hpm fxn nlq
+trf: vpt
+dms: kfz fdb
+jzb: pgv cnh
+pgb: scx qxx
+rdx: bmt dgr
+xsv: xqr srg pct
+pbh: vdx scj sfk rdc
+dct: kns pmh jck
+klf: gfx
+glp: dsg qxj xcq
+nld: rxd
+shc: qmk
+zpq: tqg
+qhm: smc xqp cxd rsq sfq
+ctk: rzb cqs jfv
+lhz: lmv ptv
+dcs: gzh qgg gpg fpf lxg bkh
+ptv: ptb
+gzg: mdr
+sbg: ccv jgv
+tvd: dvz
+qdh: thc chs
+fgb: dmk rvr qfh tzs
+vrx: ptc
+fxn: ptl fxl
+ksj: pdv gtf
+lcq: jgv sxm zgv
+njz: mhl gcf jtv
+crc: nbh mqg
+nff: tzx
+kxg: ndq dkj llk
+hbn: qgh nhf
+gxt: mdn
+qbb: fqz zcj fvz dmn
+bsp: lzm rnf cfm
+pkd: hhj xzj bjh
+qmb: kdl shc cvv fgn
+kmq: nmt hft bqm qcz
+xkf: nxq fjc qpm ckt
+zcq: jlq mcl
+hzj: zjm qpc crc nzl
+lnv: vkn
+kpd: htj xnb
+zcz: fsd bqm nbg tln
+lmh: pkl
+ntv: kjc hbx jgl
+szt: kcv bcx znd rdg
+zrt: tsd hlr nlk nnp nph
+cnq: tkt
+bgm: kpp mdv fsp
+bfm: rms
+mhc: bzx
+zxg: qpm xvm zvg nlm
+bpg: xgh mdr
+cqr: jsv bqm
+hfp: jfq sxm
+gfc: sxp
+vss: mld tlv nzd mlf nlm fml
+lzv: xlh vct ltb
+kch: fxn rjz dkd lvp pxv
+cmr: jnj dqp hcx srg
+ktc: ths rsq kjb zpt
+hhk: dbp dsg tzg njb
+trg: vbc jtr xzj
+hcs: zth cnd
+nnz: hck dmp bpf djx
+scc: lck
+lvc: zzc blk psv mhx
+xbz: qtv lzv
+bqq: tqg qkz kdc
+ngd: hqx
+grd: fkc vhk hgq
+jcs: zrs qft vxj
+sbd: hpg
+qjb: crq kfl
+szh: hkd
+frn: zkd hsp dbc
+gvn: zzh sxp
+mjs: fdq lnv
+xxz: cgq mgg jpg shc rfq
+mkm: ggx
+jqr: sjm fsn hms zqz vrg
+jpg: mlf
+ksq: ktr ssl blk lpm gls
+xrb: nzl tcp mzr
+xtp: mrc hhk
+qft: xjm frx
+cfk: dzt bbf
+lbn: vkb gbb
+htq: ggg bpg kzg nzg
+vhq: sxc
+bsz: rcn pdl glm grd
+qjq: kxq nvk tmm jfj
+ftd: kkv gcd mdr mjz
+rbg: pql hvb zkp jgl
+phj: fxd gmf qdh ldn
+rjh: fft sxt kdr nbg
+drk: cnh
+xhp: bsp qct zhj
+xlf: lhz nmg
+dbf: gpm vtc nzf hqf
+snh: drl cjm fxm xmc
+lsp: qnn
+ppn: zlj xcf
+xcd: dmn xbc vhq sqs czm
+lbm: gkt pkl
+qbt: sbd jtj vzc
+cst: hxs fgh jxr lbn
+llz: lbj psd zfm xqg fbq
+nvh: dns tfv txx
+zjn: rdx ldh bkj qkz nvc
+pnj: nlf vdv lch
+zvq: rgm msm tlj sps
+pfk: tcm rsm pls
+fnv: fxl xlx tfv
+qdb: rnb vbx flx qjv
+nln: jvr dng txb ksv
+vvh: vzg hzm zrx ptr
+rmd: lvf chv jvn
+pbg: dfn gfc gdv
+vbb: vlf ptc qnr bmg fpg
+hbs: gsf lxr qjp
+tsm: qbc
+txb: jbb dtl hhg qbq
+mvd: rqv mjp vvh bqx
+xzz: zkp trd
+jxb: pns ksq hhj jqm sck snl
+tlj: nlf zpv
+mhm: vfg tzg qpc gxd
+xbr: txx mrq tqp ksq
+zpt: fbm pjg mkj nmt fsd
+ksz: nbh jvj drk vrd
+zhj: mdn mjn pnr
+hjp: bhs dqn rxh qbv drx
+qdm: kqq nhh vzt
+ssk: xzz xms lvf lsz
+fxc: cnh
+cpq: mjs kcx
+lgz: gcq pbp
+xkk: mmh
+kdc: zbk lll
+dkg: dtc xvv
+fqz: srd lgz grx jjm
+rjt: vkf
+mtj: mmp pmh btd
+xmr: qqf bxp czr
+lvf: fxn
+rzt: vzc
+tfc: qhx lqk
+hpm: lgk rtb vvr
+zmv: rkz
+gdl: jrr gcq gcc
+bmg: nqm rbv
+klg: dmm
+shs: chs xjr qsd rsm
+jsz: ckf czk tqt htl
+jvd: qsf zhz
+vll: rjp gvn jfq cjv
+vhp: gkg dks
+znr: ptl mzv mbz
+tdj: lhr fcj xvm xqv
+bzh: ksb
+fbg: dmr ccc
+qfb: gnv zbc xqr
+xbb: kzs
+ckn: ggg mcl sjs qbt gdl
+sck: hjx
+tsc: sfq
+qpc: lvp
+lfd: sgb xnx xms jpg bcp
+lgt: bbt vbs txf
+mrc: sxm lsp
+dsg: nxl jlg mlk fsn
+dkd: lsx ptb
+qpl: fck
+jrr: dsb
+pzt: lbm tkt jjd qbc
+bnj: hbz bng
+sxg: sqb sfq
+fpg: lxr
+tzz: qkl qdr
+xrq: scc kdk mhl fvg
+bth: fdq dpr
+fsn: trf kkc
+fxx: xpv lxg smt
+mkr: lqk tnt
+rpt: kxh gqf kbt
+mpj: lbj
+qtt: zth mdr
+zvz: bff dqq cnq csq
+qkx: pnb hgn fcm
+htd: zgn
+ldf: lll bpv bsr knr vlf
+pzg: kkb ggb rnf
+vld: psx frl
+nzn: tdd thx
+fhm: kns xxq fsj txv
+pxg: svt vms dmm lmh
+qlb: pch zsh fkl qnd
+nlm: nzd
+hgq: hbs
+nbg: bzx
+sjm: dkg nvk xnx
+fcm: knr htc hqf
+qlz: kmn nqt zlb sgl
+nrm: jlq ptx fkt
+hdj: mft xlh rsl
+vzv: gqz mnc zhz pzg
+vlg: zpq jqs
+vfq: jdq
+vkd: krt qkb hbs bpv
+jzr: qpc dvz
+vgn: txm jlx hvb mcl
+zqb: cpv ptx tzg
+sgb: qbl txf ndn
+qfj: rst qsh bfm fss nfs
+lzp: rtr gdt fgh vhs
+mjz: lfx htl fpf
+klq: tbf fqq ndn xgq
+nzb: ndq hhx gcc svd zpj
+xzj: tfb
+pch: nxz qvx fzf
+xdv: kjp rnb qxx
+zlq: nrg zbk nnb
+rvr: sxx hss ccl
+cpk: dkg djx fxx
+cmp: skn nth
+bmn: hkd tvs xcf pdl
+gzm: cdc
+qbq: jsl
+mdg: zvt rdk mbh
+psd: drn
+hhh: vnk jjm fhx ptv xcp jzb dtm ztz tgh
+gxl: sqf kzn
+pbc: fgk qsf sjs vvz
+fdx: jcs dpr xcf
+dzl: nbc dfb dtd ljs xrb
+cxq: glk brh
+lft: mbg
+bnn: rdt vld qzx jqq
+dfl: hsp frl
+nxz: czr
+ggd: jfq fgq
+krt: zbc
+scj: rgm lnn
+knm: pdv
+ksv: vnv xvf tvq
+vhs: bns fxl sbd
+fvg: dzv
+cjm: khg ctv
+gdd: sfs txm jnv
+gff: xgx lst hhg xlx hfp
+gvt: vsd hcx zgx
+xdc: cnd tcp ccv
+lgs: zgn gkg
+snn: lhl qxs mfh nbc
+ckb: mzr pdq mpj
+zmr: fkt xrv mrr
+hhj: ngd
+hxz: tfv
+mmr: mtj pzv tgh vrg
+qpm: rhd hbc vqm gvk
+ckt: njb dfl
+mhx: gvk mld ctg fzr
+hjm: fbg ndm mfd jsv
+sdf: gxf lsp tfv
+rkn: jzk zcl brh
+lbl: pkl
+lhv: qbc fjx jcr vkf
+tsp: xlf vhq spt pdq nbh
+zls: jfv
+qvv: qbv bdv plm mfg
+zpv: csq qxx
+qsd: nph hld bdf
+fgt: xzk qpl xzj zgx
+qxf: zvm fpk fdl
+jtj: nsz
+kpj: ncr njk cfk
+smp: bfg scm dms ctk gxl sbg
+fdg: kmj xbz rzb
+tmb: kzz nld ksj zjl
+pks: fzv sxq ngf dpp
+lgn: shc kkc
+vpt: txm rtr
+dqp: lck bzx
+qbh: lfc gzh pcb
+kjr: bpf chp jlg xnh
+xbc: hdj vcr xdc
+kng: brz tfb
+pbp: qhx
+xjm: str
+ckp: pdv bqq cng xrm
+sgl: nnb
+vql: jvd psx xcq qnx
+fnn: kbt
+cvc: bcx xvv ctn rjp zpk
+mbh: skp dlr
+ccb: pzv dsb shg
+vgf: gsc ddb zkp hpm ptl
+jpp: rcz lnz chp
+hgd: czf zzc rkp
+lks: grx dtl xnj
+klv: vnv kdj qrx nxq flz
+gkv: htc kqd xgf
+jnv: xkq bht mgc
+kcv: vqm
+txs: vvr rnj pxv jvd
+hkd: gkt
+btk: vct zqz spt
+rvn: xhm kvn tcp rll
+qcp: fkl
+qnx: nsz
+vck: ndj nnb nzf knr
+dtc: zfm drk vpt
+bnb: sfq bxz gvv
+rsp: nhh htg lmh kpj fdh jnc lqb
+sfx: gdd ktr
+ctp: zqz pgl sbn
+cvv: vnm gsc znp
+mjp: vlf
+jrp: jgv grh qps tfc
+tvs: kpp
+fcs: dzb kfl gtf xtf
+gqz: mqg
+zgv: lsp jpf
+ktm: sbz mkj dpb mnf xjm
+lkl: vzg sxh vhk
+lbv: bcx tdl skp
+zrb: dpr jhm
+jxf: gtf
+blv: dgr
+hcx: kzz
+zsd: bdv dbh fss
+hmv: xbt gpm
+cxz: jhh
+dfv: cfk xxv
+gdq: nxp ptc
+vtd: kfz zcf kbt
+dmp: gmt
+flp: hvb kml thn
+dqq: vkq fnx dqn
+ltt: mcd dgr
+bpd: dfl hpr ggb xnh
+rcc: jpp sfs lxg xkh
+hpf: mpj jrr gcd mgc hbb
+fnx: kpp
+rlf: pbf zzc zls
+tlt: qxx qkz tzs
+sqs: xjk
+vmf: rnk frh rtr
+pxv: jlg
+znp: vqm
+crh: bpg rxt nrs smt
+xch: qjb qqf prc
+mtl: bnj rcq xch
+kcz: sxx jnc brl kns
+kvd: qqf vxd rzr
+xjr: kjt
+ths: dvg hrn hmj
+rfh: fdx nqt qnr fbg
+tmm: vqm jfk sxc pgl
+knp: rgm gpm
+txx: lst
+pqh: gzg xbl sqf
+vzc: lfx
+kkv: jtc plb
+gpf: sxg sfq rcn
+ftz: bzl jtr
+kdk: bqm njr
+hrj: jdq
+ngf: bjf
+rmk: fnn zcf
+tdc: qzx czk grh hqc lcq lbn mxc
+vbx: jhg zrs vsz ggh
+gvk: glk sss lqk rgj tlv
+vmz: gdv dmn xkk
+cjv: ctg vtd vld zqb
+zps: sgv rcq
+zdh: kjt kdk lvv
+rlx: lfc nbj rzm
+bqr: gqf qxj jlq grf
+qcs: zqg btk grf mmp
+tgd: lqm gsf kjb
+hss: rzr gtf mdz
+qlp: zvg
+zgf: zrb sfk sfl dvm bgm
+bsr: kng sdj
+hmj: qns
+dsm: cxz gcq
+rcr: ldn xjr zkt skf
+ldr: fmn lkm mdx
+tkt: nph
+vsb: mnf ftr dhc ggx
+dzs: bbf jjz nmf bjf
+mzz: nqm nnp
+dtd: jck gls
+mdx: hqx rqp
+ssl: sjd lfc nmz
+lgb: pcf vtc mhc hld
+fxm: nld fck xxv
+qkt: xmp smt ndn hrj
+ltb: vpt klf
+rdp: tzj sxh ncs dbz
+xgf: knr
+rdk: nlq
+vzp: fnx gpf nbg jpr
+pqp: zkp mzr
+xzf: hpr lsz rtz cpk kjc nnl psd rdg
+brx: pjg
+kqs: qgh trd
+xnb: jcn qcp
+skp: dms
+nrs: trf xvv
+smc: jsv
+rvx: plm vhd gnv
+djr: msz dms qxt
+rbm: lhz grx chp
+lsz: dmp ltc
+cjh: hpg bqv rdg
+qmf: zgn pnr lvp
+xgj: zjz nlf szh hfm hkd
+cbg: fkl kqh
+xtf: krm ncr
+jkt: jfv
+mhl: qvx bmg vkn
+rll: fdb
+qpv: kbt xkk
+tjq: nlm vgh dmg
+ndq: pgv
+hxc: clp tzx jvb
+hhs: ztz klq jpf
+dhc: lqb kqd crq
+jbr: ksz qmf mtj
+zgx: rxx jjz sqb
+vzq: rhc sdj
+svb: gzm
+fgk: gcd lnz
+stq: flp cqb fnv hhg
+vdh: xjk rcb klf
+vnc: rgj vsc gmt
+ckh: nth nsz jxk sss jzb
+vtl: kfm vms nrg
+dxp: mdg xgh mfh spt
+pjc: vmf gkx hcs xjk
+lpm: dlm ptx mrr jpg
+vgh: cbh jfv ndq
+hhz: btc vlf xzj lbl
+svt: mpb
+mmh: gls
+jkm: vpq nbh
+dvj: fjc svn qbh jlx
+rpn: jsv rcq grb
+ltc: mdg zpp gxh
+hrq: flx xcg zkt ldn
+qqf: clp bzl
+rxd: fdq
+fgh: sjd rkz zth
+tgp: kqd
+vmq: gbh vsz dvt lnv
+pmc: cfv gkv chs fmn
+hft: dhg zcx dvt
+ksh: bqm smk vqh bmx
+blr: scc cfv qdr
+rcq: tch
+lnn: qns fss
+zvl: xmp dbp hfp
+lpr: dms gmt klf
\ No newline at end of file
diff --git a/inputs/25a.txt b/inputs/25a.txt
new file mode 100644
index 0000000..f5bdcc2
--- /dev/null
+++ b/inputs/25a.txt
@@ -0,0 +1,13 @@
+jqt: rhn xhk nvd
+rsh: frs pzl lsr
+xhk: hfx
+cmg: qnr nvd lhk bvb
+rhn: xhk bvb hfx
+bvb: xhk hfx
+pzl: lsr hfx nvd
+qnr: nvd
+ntq: jqt hfx bvb xhk
+nvd: lhk
+lsr: lhk
+rzs: qnr cmg lsr rsh
+frs: qnr lhk lsr
\ No newline at end of file
diff --git a/src/25.cs b/src/25.cs
new file mode 100644
index 0000000..30b6620
--- /dev/null
+++ b/src/25.cs
@@ -0,0 +1,115 @@
+using aoc2023.Util;
+
+namespace aoc2023;
+
+internal class Day25 : Day
+{
+ private Dictionary> connections = [];
+ internal override void Parse()
+ {
+ var lines = Util.Parsing.ReadAllLines($"{GetDay()}");
+ foreach (var line in lines)
+ {
+ var split = line.Split(": ");
+ var right = split[1].Split(' ', StringSplitOptions.RemoveEmptyEntries);
+ connections.TryAdd(split[0], []);
+ foreach (var r in right)
+ {
+ connections[split[0]].AddUnique(r);
+
+ connections.TryAdd(r, []);
+ connections[r].AddUnique(split[0]);
+ }
+ }
+
+ // Logger.LogLine("graph G {");
+ // foreach (var c in connections)
+ // {
+ // Logger.LogLine($"{c.Key} -- {{ {string.Join(' ', c.Value)} }}");
+ // }
+ // Logger.LogLine("}");
+ }
+
+ internal override string Part1()
+ {
+ var br = connections.ToDictionary();
+ foreach (var b in br)
+ {
+ br[b.Key] = [..b.Value];
+ if (b.Key == "nqq")
+ {
+ br[b.Key].Remove("pxp");
+ }
+
+ if (b.Key == "pxp")
+ {
+ br[b.Key].Remove("nqq");
+ }
+
+ if (b.Key == "jxb")
+ {
+ br[b.Key].Remove("ksq");
+ }
+
+ if (b.Key == "ksq")
+ {
+ br[b.Key].Remove("jxb");
+ }
+
+ if (b.Key == "kns")
+ {
+ br[b.Key].Remove("dct");
+ }
+
+ if (b.Key == "dct")
+ {
+ br[b.Key].Remove("kns");
+ }
+ }
+
+ List h1 = ["pxp", "dct", "ksq"];
+ List h2 = ["nqq", "jxb", "kns"];
+ bool bfound = false;
+ while (!bfound)
+ {
+ bfound = true;
+ int c = h1.Count;
+ for (int i = 0; i < c; i++)
+ {
+ foreach (var n in br[h1[i]])
+ {
+ if (!h1.Contains(n))
+ {
+ bfound = false;
+ h1.Add(n);
+ }
+ }
+ }
+ }
+
+ bfound = false;
+ while (!bfound)
+ {
+ bfound = true;
+ var c = h2.Count;
+ for (int i = 0; i < c; i++)
+ {
+ foreach (var n in br[h2[i]])
+ {
+ if (!h2.Contains(n))
+ {
+ bfound = false;
+ h2.Add(n);
+ }
+ }
+ }
+ }
+
+ return $"{h1.Count} * {h2.Count} = <+white>{h1.Count * h2.Count}";
+ }
+
+ internal override string Part2()
+ {
+ return $"Merry Christmas!";
+ }
+}