aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJulien Dessaux2024-11-21 00:23:25 +0100
committerJulien Dessaux2024-11-21 00:23:25 +0100
commit72a9d740bf9d06b00b50c43a2e875b04c6d98444 (patch)
tree1685c3da7c72f44bed6452f9cec0eb35c06f76c1
parent2023-24 part 2 in haskell (diff)
downloadadvent-of-code-master.tar.gz
advent-of-code-master.tar.bz2
advent-of-code-master.zip
2023-25 in haskellHEADmaster
Diffstat (limited to '')
-rw-r--r--2023/25-Snowverload/example13
-rw-r--r--2023/25-Snowverload/first.hs76
-rw-r--r--2023/25-Snowverload/input1256
3 files changed, 1345 insertions, 0 deletions
diff --git a/2023/25-Snowverload/example b/2023/25-Snowverload/example
new file mode 100644
index 0000000..bbfda0b
--- /dev/null
+++ b/2023/25-Snowverload/example
@@ -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
diff --git a/2023/25-Snowverload/first.hs b/2023/25-Snowverload/first.hs
new file mode 100644
index 0000000..18063f2
--- /dev/null
+++ b/2023/25-Snowverload/first.hs
@@ -0,0 +1,76 @@
+-- requires cabal install --lib megaparsec parser-combinators heap vector fgl
+-- very slow with runghc, use ghc -O3 -o first first.hs
+module Main (main) where
+
+import Control.Applicative.Permutations
+import Control.Monad (void, when)
+import qualified Data.Char as C
+import Data.Either
+import Data.Function
+import Data.Functor
+import Data.Graph.Inductive
+import qualified Data.Heap as H
+import qualified Data.List as L
+import qualified Data.Map as M
+import Data.Maybe
+import Data.Ratio
+import qualified Data.Set as S
+import Data.Tuple
+import qualified Data.Vector as V
+import qualified Data.Vector.Unboxed as VU
+import Data.Void (Void)
+import Text.Megaparsec
+import Text.Megaparsec.Char
+
+import Debug.Trace
+
+exampleExpectedOutput = 54
+
+type Input = M.Map String (S.Set String)
+
+type Parser = Parsec Void String
+
+parseLabel :: Parser String
+parseLabel = some letterChar <* optional (char ':') <* optional hspace
+
+parseLine :: Parser (String, S.Set String)
+parseLine = (,) <$> parseLabel
+ <*> (S.fromList <$> some parseLabel)
+
+parseInput' :: Parser Input
+parseInput' = M.fromList <$> (some (parseLine <* eol) <* eof)
+
+parseInput :: String -> IO Input
+parseInput filename = do
+ input <- readFile filename
+ case runParser parseInput' filename input of
+ Left bundle -> error $ errorBundlePretty bundle
+ Right input' -> return input'
+
+compute :: Input -> Int
+compute input = size1 * (order g - size1)
+ where
+ n = L.nub $ M.keys input ++ (S.elems . S.unions $ M.elems input)
+ e = [(from, to) | (from, tos) <- M.assocs input, to <- S.elems tos]
+ n' = zip n [1..]
+ e' = map (\(from, to) -> (fromJust $ L.lookup from n', fromJust $ L.lookup to n', from ++ "-" ++ to)) e
+ g :: Gr String String
+ g = undir $ mkGraph (map swap n') e'
+ size1 = length group1
+ group1 = compute' (nodes g)
+ -- Karger's algorithm to compute a minimum cut
+ -- implementation from https://github.com/jrp2014/AoC2023/blob/main/Day25/Day25.hs#L60
+ compute' :: [Node] -> [Node]
+ compute' s | sum (map count s) == 3 = s
+ | otherwise = compute' (L.delete (L.maximumBy (compare `on` count) s) s)
+ where
+ count :: Node -> Int
+ count ns = length $ suc g ns L.\\ s
+
+main :: IO ()
+main = do
+ example <- parseInput "example"
+ let exampleOutput = compute example
+ when (exampleOutput /= exampleExpectedOutput) (error $ "example failed: got " ++ show exampleOutput ++ " instead of " ++ show exampleExpectedOutput)
+ input <- parseInput "input"
+ print $ compute input
diff --git a/2023/25-Snowverload/input b/2023/25-Snowverload/input
new file mode 100644
index 0000000..7c0486a
--- /dev/null
+++ b/2023/25-Snowverload/input
@@ -0,0 +1,1256 @@
+pxv: xtm lsh jgq
+tgb: jqb rmh fzx
+fnf: mpx lzb vnb sgd lhz
+blx: xrj
+zql: czm kqz gjt rxn
+mzp: fqk
+kjb: nvn flq vbj vzx
+jtx: stq
+ntf: bgg
+lsc: plj ljr
+bzg: rdv
+fjl: hhs fsq kbt jmb
+hzv: cfl smm mtv zkb
+lft: grq btj
+hgc: hnh dff
+rmx: ckz sgj fzz pgh
+tnz: qst vlf ndh
+tsm: vml vgx
+zkb: pvv mng gmr
+gjt: mgv jcj lzc mhz
+kqb: xgm nvb fzj mfb
+pjj: fjb hgp fkb
+msn: rjh fdv
+bnj: fxh xlp
+bjk: gfx cbz fzj qzq
+kzl: jdj
+hxt: dlj ttx
+fvv: mfl tdh sqt
+jgd: nzn blx bxv pkt
+xvx: qkl grq xvz
+dmb: hnh
+hrr: pst bbk
+mzh: mxd knn brg lxh kfn ntf
+vdl: gnr qxm xks fsq qqr
+qrk: kxf jzj fbj szn rfs
+prs: mdd
+bfr: nrf
+sqp: nmt
+gvh: qrv mrm vrc ttd vxh
+lzf: rzq jhr jjd mff
+gpj: pxn
+zqg: rjt cnp dxz
+xgn: mst xjv
+ppr: tkm
+xnp: skq dlz
+mpn: fct nhv vrv hnh
+xsk: cbc phm jmd ngp
+vzm: xlk trg jct
+fmk: mxd ckv psh pzx
+vtv: jmd nbl
+jlv: btf zmh
+rkj: qjx cst jjd cvj
+gzg: dlz sls knn rzc
+sth: tzn cgq qqj plh mvv mrq
+nzz: nbj hql vqc
+vct: hhj gxs zsg hgq
+ckb: zbc phh
+hgp: fzr dkr
+tdh: jjs
+lqd: vrc mxk qlk dlr
+mkh: rtj pgz vzj
+rdl: pnm mst
+stl: hqd lzc dlb
+ghb: xxj hmc
+ppt: psx ngh ssk
+njl: msn gkc rhh vzm
+xgb: ftc plj fnj grf
+xxd: kbt szx cvq hqn
+hms: gxf lkx nvn vhd
+gxf: bjk skd rlh
+ndx: qtr hrt
+dks: fsn
+lzq: csr rjs
+rfx: csv txd qps cnl
+srl: cqv
+vlf: zmh pnq
+fnq: zgb jdk lkb ccn
+dln: ljr ctf
+pdt: lzc phc rzf
+lcs: bhs xtq
+lgm: frz zxr lzc
+vdv: bzg
+mhz: smg
+trj: cjg krh sgj
+prv: msp
+fvj: gpd
+bdz: szn zmt pdk ptd ngh
+sgd: vft hdm
+dds: jdh qqj qdf pmx
+pbq: qph qxr ffn nqz
+mms: bst brz pjg
+qxj: tjs blx snb
+pzt: vml
+zzz: pkt dqs gfg
+dtm: mqv dtr rjt fct
+rxp: tgj
+lgg: vhn pjr
+jzk: rvb zdv qvt gkk
+xfj: cvj sgd nrk lcm
+vfq: vmt znq gnr
+sbp: hmr
+qzq: kgv npb
+flh: nrx crh ddj szk pdk
+cmv: vtv ntv gcn tvc
+tck: cnk kjv vcp gld xlt
+qfm: nqz dlz
+nxv: nbb
+kbq: jtx hgp
+mdr: fnz gqd vnn bst
+bpp: ppd lnh smm zxq
+mrq: jbh
+zdt: gqd
+pnq: dhj rqh
+dvx: qvp bhd
+sch: dtv dfk
+cst: ttd
+vbk: qkl psx
+tmz: qgg mzb jgs jsh
+ddj: tgv msp gqd
+zkg: mnd xbm kbg
+hmx: rln kbg sck lzs
+tqb: bjh xsp fxz tvt fpr
+bjm: xrr
+hjs: tmj dzc lpl ktz
+cdm: tgq hfg hxt xmh
+hhv: fxh hvs
+rrm: ldm
+xcs: dfj xhc
+khk: vgx rgt
+slf: ccj fbp sxt
+mcd: fmx jqq qhq
+pkl: fvp qhv ngp vcp jgq
+hzn: tpf mjs ghl
+gxs: hhj lfb
+tzn: prm
+tkc: tvj bjm
+hps: bbx
+hrs: qdl gsh lfn lhn
+ffn: rjh
+zhh: lvl hhc
+pch: pkj njr nzd lmv
+smk: pjs gdl
+ssc: rxp smk lhn
+tzd: xtm phn lpl qkg
+jmp: gqp lln
+xkp: jsm
+qch: lqp
+vjg: snr drk spc jcp tpf
+hvx: prm ztt qvp
+qdp: fsn fdl kdv vkv
+dkc: jkf rxg ncg dpn
+qhd: hgg phh gvg csr lmz
+nlz: czv cxj snv kxk tnx
+xbq: gzq fjj pmr tmj
+qnn: xxn qjk lqp mzp
+qqr: fkx mfl ghb
+mzk: xgm zjg tgb dvr gvr
+fbx: lmz fld nvb bcr rvn cgm
+tkf: czv btf
+mtc: bsf jnn rkn
+psz: htn bpn vnt
+msg: pjs
+rln: nhs lsm
+xcx: nhs xtp
+hgg: xmh hxt pjs
+lsh: jnq
+qgm: sdz
+ztf: ndx ncd lzq dsr xsl tnx mzb
+phn: gmz kvv dzz
+vnb: zfh
+xjv: tfg
+msc: pgh srf qmb
+tvd: crv cbn zcx
+gsd: crn phh jcp
+xvg: prm jjt
+cvf: qjc fkb ltk cgq
+ftb: msp gqq gqd vfq mlk
+rcr: cmd tzm mpx hhv
+vkp: pkr
+hgq: nlc ssk kdg
+tzm: hzf flq
+lxg: jbb vgp
+hhc: rgz
+zbd: csr rts lnz pkp
+rrt: pgz tjb jst prn
+gxx: dpm hkv xlr
+qmb: jcj bsx dxv gxv zbd
+brz: lgk kbr tck hjp
+ptt: hbb fdl qqd
+bdq: fjc
+cpp: btk xtp
+mdh: pkm qrs ppt
+fxz: kkk sns
+jqd: szr vlp bdv kgv
+lpr: njt mpx
+xbf: rhh dts cbl vnn
+dzn: hbh czs qns
+cpk: bmv scj xzj msj lzc
+jdv: jht
+zvv: zsg zmm bnc
+npz: nhv dqx vdz cpb cbl
+prc: jnq
+czd: kdx fjt qrv lnn
+cgn: fdc mpx kqq
+plm: hxs mhx vtt
+ldp: cqb pgg trg psx
+dsz: lqp djg fqq
+szh: pzx cfl cdk kzl vzn
+jjd: kzz
+tpz: phn bnr xlt
+bhd: vbh
+cbl: rzc
+jqj: nsh
+zmx: bnx ptg zhx xkp
+mml: vzx qvt
+cpb: qhb xlt
+jdj: gfg
+gbx: jvs lgk vdn
+jqz: gmv scd lnz jdk
+kdq: xjd gcg fjl kgx
+ghg: mxc
+pnt: zvx vbp
+plh: zgb crs
+fjp: cjc hpf snr xfj
+czs: vth
+prn: nsv mbh dtk kzz
+lxb: jbh vft nbb
+ftt: gfg vkv cbn vns
+shq: gbv qns flg
+phd: lpk tmv dlz
+zvq: nnk khk
+hnh: kdg
+llb: nxv qxq
+ncd: fkb
+tmv: xjd cmz
+dxj: tcc
+qfx: ltm pdk mxc
+mfb: fgd
+vjn: skn gmg
+htv: rnr fht jjq fth mng
+tqp: ktp scp vcj ngs
+jsz: hmr tqx
+mzv: sch msj
+jnr: drr vnm nkf zrj
+chg: ppd vcp dtr lsm jnq
+qkx: xxt tgv fnc ngs
+vtm: mvr bkg rdv
+bsn: mdd
+zmh: stl
+ljx: gtb vnh msp jbt
+rhl: ddb ghl bcq srt
+ljr: czp
+vnn: drr
+dmz: djg bjt nsz drk bsn
+cqk: rjh mch nlc drr hrn njj
+zld: tsm nfr
+gjk: lcs vgb
+vln: rbl mdh ndq
+ctk: cjc vpq hgv
+qlr: prs cjc hhc
+fpf: gvr vxh
+fkh: bjr bjc dsv
+mqk: bgl lgn kff
+xvp: vcn bjm stj
+xgm: zvs
+pgh: kkt
+pmp: ngh pkv bsc vsj
+snr: plj
+pqd: zfm phg lzb jfl
+bqt: nqf nfh xvg csj
+xjp: rfg mtv mfl
+gsh: rxp hzf jtq dtv pkr
+znh: zxq
+zvj: mpx ccn czv qgg
+lhg: fjt bnx mhh
+tjs: ngs
+knn: bbs
+lfb: bhf
+bcn: rrg ssn lzb
+njb: tml hmk qqk
+dbv: ttx vbn vng qgf
+rzf: ssn skh
+ddx: ppx hsm znh rdl
+qfz: kfj kdv
+xnk: gkg
+ftc: tkc jst
+vtj: thv jdj tdh
+dtk: ghl qnh
+sls: pzx scp
+vcp: knc
+fzz: zth
+xqk: qvt jtq
+tvt: llb krf mvv
+dvv: kpz fbj phd nng
+pzc: vfk fsr jsz tqb sbm mvv
+gpl: bkz pts mmk
+mzl: xng fxz qlk
+nbh: dmm qfz brs gld
+txd: vgb btk
+zgb: dfk
+hhs: xkf
+gck: bcn cqn tcc cgm
+fnj: qvt mcv ttd bfx zfh
+bjh: mzt jzq zhh
+ssn: vzx bbx
+lxk: xrd dxb
+rbl: tvc gdj
+mcv: mrq zdh pts nmt spc
+ztb: lhz nvb lnb jzq
+qgg: tzm hpf gfx
+mnc: hqd qnh rkp vnt
+kdx: bjp ltc
+mvf: zls cnp rfg rxr
+plf: dtv npb xng
+grd: zjm vcn jzq
+gms: smg lnz
+tlz: mdd gtt
+vpp: pst fvp hhr njj qxr
+slm: llj
+jxv: kpz rnr
+lvl: bbx
+rnx: dks
+qbh: vhc pxn hgv
+qnh: bzg
+rzz: vbh crn
+qmx: phr qqb njs pzt
+nhc: pxt vcs jtz
+ptn: mff vpq
+ppp: hhv msg srf fxm
+rsm: cls cxq sns bcr lmz
+xdx: xrd zhp kdx
+bnx: fqq mxk
+jzg: vqc dxj lxk
+zrn: bhf sfb zxq
+jbs: ksc thv lnh nbl rbj hfv nzn
+ndq: jqj
+gnr: rrm vns
+dfr: msj gtt bkb rbs xlv
+ptd: hbb
+rrq: fsr xrr xvp ntn
+mjs: cxg
+gfq: rmz gms lxb lzn czm
+hfn: nhs
+rcb: mcg lpr dlt mlh
+qlp: xtp cht mkk nfg
+kjg: mbk nrk qqj tmz ssq
+frx: pcg qrs bnc vmt
+kqs: ckz rtj
+vkc: mrd vfc qrk vmt
+jtq: sjb
+frz: psz ctf fml
+qhb: hpr
+ndr: bdv nqf jrl sld
+txh: xjp fqb zzx tft kvv
+xbz: jkj hxh
+ksc: czj hzs kmp
+cgl: kgx cbc
+gtk: dmb mlk
+dcx: lsm vdz rjt
+spg: jzc mkk frx
+pms: xrd gmg
+hdl: fpj
+bpj: kzz
+vpc: mqv ccj bdq
+znn: gpd nzd dtp
+pkp: zhn hdb krh
+ltp: msj lzc
+ckh: jsz rvb xgm jsm qch
+stj: vft rvn qns
+cbn: vnh zls
+mrg: tlz njr lhs nxv
+mgk: pnm kbm
+hmj: fnc qhq
+gbz: ffn rkv kzl pdj
+cls: bmt vkp
+fmp: drs jkf jmd sck jnn tkt znh
+gxv: jgs xqq nhl
+mgv: zhd
+xgf: rqh
+jjs: jnn mxc
+nmt: szr
+zpr: fkx lhm dcv
+cvq: qhb qfz qxz
+rbq: gjk xrb qrs hbc
+sqh: phn xhc hnk qng ktz
+ntz: kbm pll
+rhh: qmm
+hxl: dtv gsh
+mhq: jbh
+dff: cnl kfn kdv
+vjd: dgm jcj fpr
+nnt: vng nvt qlr lms bmv
+grj: gld mgk zzx fjj
+xsp: hzf
+snp: stm ghg xtm
+rss: rjt mgk fdv
+qgx: fnc bxm
+fqp: hxl
+spc: gpd
+cnm: tcc
+kpf: vzj hps lfn
+ljv: cjc
+hnk: fts gqq pkt
+dgc: mmk rrg vqc
+brg: fxg gcg
+rjq: mbt fqp csj
+jkt: gxx jbt plm
+htn: vxh gcc hdb
+nrk: jrt
+zvs: zdh klk
+xdk: rzc fsq ctc btx vxb
+tlc: gsk cgg mjs
+lkx: xzj rts rsb
+rpb: jzj pkm llj
+flk: mqk qst pcv
+bsx: zjg cxg fms mxk
+sck: xrb
+zxq: dzc
+vds: slm zdt cxh gjg mlk
+rxn: sgd xxn
+mbn: hvs hng ptn prs
+zvf: fjt fvj nzz kxk
+bjt: fgf xrr
+ggb: hgv cgg mzp
+hhr: ldt
+gll: rrg dvr
+mxb: hsd jvs rkm jnc
+dct: gjl xxt gbx tzd
+mch: fnc tjs dks ndq qmn
+svb: trq tbs gpj ctk
+qst: rjs rjq krf bjr
+lcb: pvr skq kjx
+sgq: zxr mqn vqc
+cvn: vcn lhz smk mbk
+hjb: bjv vcj vnh qfm
+lkd: ncg ssk bgx cts cvv
+rkh: fjc jnn
+jtd: ngn vnt nzd
+qjz: zzz dfj xjd qfx
+nbp: jht pfc nqq snt
+thh: dsz ntn qch grd
+vtt: hhs
+snb: xjv stm
+cch: frz mmk mzq
+hdm: bzg jqb
+rnr: rkz
+xzk: dxm zth xvg mrg
+fcx: jjv
+bmv: fsr rkp
+jsh: sjb
+lhn: pdh nqf
+fjt: xrr
+pdk: tbd dkl
+dpf: lmv gms msj gcc qns
+mjf: vdv rzq sdn tnz
+szn: gmd pgg
+rxf: jrl
+hmz: rcx phm
+bqj: hbb xzl chh ckv ngh
+bqc: lhs
+lpk: ldm nrf dsh
+cdk: fcx khv cnl
+pbk: hbh tht ltc kpf
+dgr: hqd gmv kmz
+rmk: crv xhc lsh
+pcv: lzc hvs
+zcx: fmp nfg rgt pqz
+fnz: ffc
+pnm: cvv fcx
+dvq: mjk dsv sns fld
+cmd: ljv cgm qzq
+xrx: czp sjb vbh
+dcr: xbm rgc
+nfh: xhl kzn zdb
+kst: hvs
+kdv: ngs
+jkf: bnc
+mvb: spc crn
+kgx: lgk gdj
+qmq: lzs pcg nnk phr
+vrp: vtj hfv njs qkl
+rcq: fkd
+xhc: lkf
+qrs: pzx
+kzn: mff fzh dgq
+hkh: qpm lnx knn
+cgk: lkd jkj mgk
+xqq: xxn jff
+hfc: bhd xfx fbg
+zpt: mbh
+kbg: xbg xnk
+sbn: nbl zzz glz rcd
+dft: qng gdk zzx
+zxr: hgv mhq
+dvz: jdk zfh
+zhn: bjr
+qvp: nvx
+nvn: ltc rts jhr lxg
+fjj: pll
+lnf: gsg vbj dsz nhc
+qkm: rhh pcg vdz dxc
+lql: cqn nvx mhh jjd
+kkk: sdn dnk
+fkv: hgp rxv ngn nlz
+pls: qgm qhb
+qng: ctc lpj
+rkp: ttd
+vhd: tgj xdr
+vfc: kdg jfn
+pgg: fct
+zmc: dxc vmt xnc
+bgl: vbj
+dxz: jnq
+lmk: bkg
+slv: grj mch jrc
+vdz: lxh
+xvf: lfb ndq qrc qhv pdj
+rbs: nbb qtr
+bst: xnk jfn
+xmb: sbp jsh pmx bkb
+ctc: vtd dks
+mxk: czs
+lnn: csj
+drp: scp bvk zsg
+mrc: rtp lgg
+zvm: fgd vgh mlh
+hgv: zvx
+qlt: npm gbx bhf vhh
+jjq: qrc rkk hkv
+hpr: tkt
+hhj: cnk nbl
+skv: bpj hvx rzf
+sqt: vnn dzz
+jvd: nxj njt sqp
+fks: jvl cls mjk skd
+scn: skh pcv
+jzc: rnx
+dkl: nzn
+grf: szr lpr fzj
+frl: bhd
+bbk: xjd kbt
+tgj: plj
+fsm: tzs gkc dft xgn
+vcj: mcs dxc ppx qqb
+ntv: klq hzs
+fld: dvx bzs
+mzq: xrd
+qjk: fzh
+tss: bgl jdh jtx gvg
+xkf: gdj ntz dtr mng
+kxh: qxj ptd vfq
+kjh: ttt vnb cst pnt
+plq: ssq dzn jsm
+mbj: sls kbg slv vrv
+hrt: lkb prm jff
+fsq: dcr
+nzn: nrf
+qdv: mtk smb tlc dgr lxk
+skh: kkt
+dbf: mzp ptn vjn
+nhj: jfn bdd rnr bxv
+gcx: fkr ssc kqs cgn
+cmz: vqm
+jrl: cnm dfk cbz
+bdm: lnn xng kbq bdj
+dts: rgc dpm njj zld
+nmm: llj qqd
+fkx: jnc rkz
+bkb: bkz
+kmg: znq prc nhs cvv zmt bqg jjg
+fjk: nqs xtz gxx rfg hdl
+btf: cnt phc
+fxq: tsm qxz fqf gmd
+tft: kql jcv ghg
+vtp: nsh rkz srk svc
+tqx: bgl zvs
+djg: rcq jfl
+mqn: bsn pnh
+mrm: dtv gqp rqh
+dsg: ttd zhd tkf
+vzx: fkr
+njs: kbt zls hjp
+jqs: dln vbp krh
+rsb: qgf vjz gpj
+xxj: ltm knc
+hfg: vth kqb pms
+fpl: dsh xks
+ngp: jzj rkx jct
+ltf: cgg nmd
+blb: ghl tkm ndh xqm srf
+jfq: bfr cbc bdq mfl
+vst: dsr kqb nvb gpd
+ccz: pll tql brg bnc
+ntx: hxk gmr gkk nsv zbd
+fxm: gcc mzq
+gkk: mvr
+glz: pcc xxt zqm
+crd: pgg bgg rkh
+rcj: rjs
+gjg: mpn jkt cnl
+jnk: stj mvr lcm tkm
+rtj: flq
+xjd: mtc
+hrn: khv
+dkh: kjx lpk hmj lgk
+bgg: kdg qqd jjv
+vgj: rrm hzs fpl psx
+flg: czs hvx
+btm: hsg ngp cgl vgx jdj
+xzd: flg kxz
+vcs: mqq scd srf jgs prs
+npx: mxk rfr mxt ltp
+vkq: ppd
+gcn: fct rpf
+vgh: qns srt kxk
+xxz: fbp rkz
+jqt: gmd mxc kjv zvc fjf hfs
+ssq: cjc
+lcz: nqq jst zhd qnc dvz klk ljr plq
+zdp: bcn pnt mqq fbg
+dvc: tql rkn
+bhr: dzn mdd jhr bqc mfs dsz
+qxr: lnx
+jvl: bss psz brf
+zsg: lzs
+rfm: tnx ljv vxh
+cxh: lsh dzc svc
+lkb: rzz fzj
+jdt: nqz rfg
+rkm: btj qfx cfl
+pmb: vhc
+zbl: bsn mbk
+vhk: qjc cfr lhs
+jbr: rdl jtt jjg ffn
+qsv: gzq xbz fnz mnd
+sgj: gkk
+xlk: lnx slm fsn
+cpv: bjm kqb msg
+zmm: vhh
+scj: brf jcp
+tpv: lgn vxh dtk rfm
+lmv: crn
+nvt: bgs zbc dsg
+bxn: cst ckz rbb bcq
+klk: vft
+vsm: skd jdv ztf ttt
+sjb: vpq
+qrc: hmz
+bdd: kjv rtp szk
+vxb: gmz sdz
+vhc: vth
+rdv: rxs czp
+htk: zvx mxk sbp vhd
+sbz: fqz smt nmt gpl
+fqf: gtk bsf ghg
+mkn: vzn rtm
+gqb: fgv skk kbg
+ngq: ltn lnn vzj
+rdc: xcx dfj qxm cgk
+xtl: rlr fjc xbz btx
+jgq: cqv fbj
+krf: jtz xgf fpf
+mfs: xgf csj hhv
+fgb: nmd fbg hvx
+svj: ntf sfb lnh dkc
+brv: vjg qpd gxc bqc
+mlm: qdl tgj smq
+mzg: prn xqq dlj xkp srj
+jrc: prv
+csv: nng bvk
+hvs: xsl
+bxv: vgf nnp fjf
+lbn: rxs rqh vss lfr
+nvd: vqm vhh bjv xtp
+lzs: hnh
+mqv: jnq
+rkx: jjv
+sct: lgn tvj lfr ndh
+bmt: nqq flq
+rkk: xlr btj ptd
+kzb: zhd
+mdm: vdv mmk msc ttx
+fts: brs
+pvh: bcr xlv
+zgr: dgq gsk
+mkc: fvj pxn xrd pts
+xjg: hfv hxh
+mtv: qhb
+kpz: fln hjs
+cfk: rsn jpl mrc gcn
+pdh: jsh fkd
+qps: xtm
+vnv: fnv rnx fqb llp xbz zqg
+sdf: fxg
+jpl: tbg bxv bdq
+vvk: tzn smt bzs cpv
+jrh: cqq lpj jqj
+vcv: clp dzx gxv tkc
+vrc: hgv tbs
+gcc: njr
+cfm: pbr mld ktz gxs
+bxm: rzc cnl hdl
+fjb: rxf lvl vbp
+qjx: bdv zjm hbh mvv
+hbc: zmt
+zsx: gfg rsr dfj dbq mrc crh xbg
+rcd: qxm pnf rpf
+ctp: tpz vfc jcl hdl
+hsd: qfh
+xnc: ppx vfq
+rlr: bhs
+jkj: hxh
+xzl: ppd zqm
+sxm: hmj hqn
+sdb: jqt kvv bnk
+mnb: chj xkp
+lzn: jzq
+gft: qzq
+kjn: ltf bgs jrl fnx rgz vlf
+cjg: nbj krf mmk
+dnk: rdv lrp
+srj: mml rcq ctj
+gzb: thd rgz njz lvl cgg
+kmz: fsr kbn kst jpj
+jff: qtr phx
+kfz: mkk nmm gjl
+tnx: snt lcm djg
+hql: gpd pdh
+mmr: tch nvd xkl fpl flh
+bqg: gzq drs
+ldm: tql
+fmx: vkq
+dlt: ppr mhz
+mvv: gmv
+frg: vns nlc tql fxg
+kff: zhp ptg tml
+jtt: rxr vfb vkq frg
+skq: vqm brs
+fdl: lkf
+cxj: nhc hvb xlq
+bss: qch rbs hps
+fgd: vpq zth gfx
+cpf: prc zvq xnp bhf
+pjr: tdh
+rvn: cnt
+nmd: zvj
+vhn: glc hpr
+qrv: gnp kkt tkc
+jrr: kjr fqk zbl vlp zhn
+ndh: dvz
+str: hsm qfz vdn rnx
+hvb: tkf zdc hng
+bfx: jrj ctf tjb
+rmz: fxh zdv ncd xhl
+jbn: hpr llj czj fts
+nzd: zdv
+hsj: bjp ccn vkp
+rsr: hsm snb bfr
+xqm: jbh
+nng: jjv gmr
+fpj: jzj zmm
+cqq: qhb rkz pqz
+pfc: cst phc hdb
+kxb: chq rdl bng qps jzc
+jmb: vfb bxm xvx
+crs: rtj vnb xqk
+tbs: qsc dlj
+pxn: ztt dgq
+bkz: kqq qsc
+phb: qnc stq rzf mzv
+hng: qgg cgq
+njg: tkm ngq ltp gsk
+rkv: pvr qhv dqx
+ltg: nhv drp xvz bxm
+sdz: dzc
+xjl: cht kbm gfg lkf
+qlk: tvj nqq
+xbt: jht bjp jcp gtt
+pvr: jfn mhx
+drs: xbm
+lsk: trj gzb jlv qbh
+fnx: msj qgf
+kxf: phm xlr
+gtj: jmp vkp cmd rzz
+gtb: hxs cmm stx
+fpr: mml brf
+nkf: xcs
+llq: pgf rgt nfr
+mjk: ssq
+mgb: qkg nhg jnn vfb
+cjb: pgz lzq gms pmx
+xfx: czv mvb
+htf: ctx dvc qgx lhm drr xnc
+kvv: hfn
+zbj: frl zjm gfx hpc kbn zpt
+zrj: knc gmd
+dfk: phh
+tht: phx jhf jcj xlp dsv
+fqv: ctj jtq brf fkr
+lxr: dmm dlz fnv btx
+xpd: hkh ncj cbc vdn knn
+tbd: dqx dkl
+klf: rxs
+vfk: rhl zmh jqg cfq
+smm: vxb bqg
+xkl: rgc cts vtt
+vqr: crd ppd hxs cmz
+dbq: pgg
+hpc: xrx jzg vzj pgz ddb hbh
+tsd: cnm bjc zbl snt
+cjr: rbl sxm jrh dts
+gbv: zvm kzn gft
+qpm: xnp xhc rkx jgf
+bzs: zjg jtz
+stx: tfg hxh
+pcc: jkj qfh prv mkk
+tnp: nhl tss cdq fxj tlz
+gvg: xrr
+ckv: dlz fxg
+jrj: zhp ztt jpj
+lqp: bjr
+smt: mlm mfb
+gjv: jbb gll ddb jfl smg
+mhh: bgs
+hqn: mnd vns
+fqb: xxz vtt ptt
+jrt: cnt
+mxj: mst
+pdj: ddx vln btb cpp
+mzn: szk ghb skk rhh
+xks: rxg hsd
+zzx: qfz ljd
+rgz: jdv
+mhx: pgf
+fvz: qvp lln sqp mhh
+nfr: hnh lgg fts tbd
+qpd: hrt sqp tvj
+pxt: rsz snr znn
+cfl: snp dsh svc xcx
+vtd: hjs kzc dmm
+xlp: fkd tnd rbb
+ncj: dlz dqs xxt
+sds: tml cgg gqp
+bpn: lmk jqb jdk
+rgk: vss tnd xdx stg
+gmf: kbg rsn hsd pzt chb
+trq: kzb lhn
+fgv: zsg bhf fbp
+kfn: dpm
+xpt: fzh ngq xlv phg dkr
+nqs: fts bgx kzl szk
+lmz: lms
+qqt: jsf ztt xrx
+jdh: mbt fkr
+zjv: cgn ngn
+zvc: skk ktp
+vmp: qhb btj dqx qmn
+hzs: pjg
+qhq: lkf
+rtm: bgx rcx
+rvb: djg gvr
+cfr: dvr qqk mtk jhf
+gxc: krh nqq bhd
+tml: bkg klk
+mld: vgf pzt bgg
+nsv: vlf skv
+rrg: tnd zth
+qqj: gmv rts qtx fpf
+kpv: pnh rxp qqt kzb
+dlq: ccz cmc ldp lnx
+fzr: csr
+bcq: rxf rmh mzt
+gdl: qsc xgf
+tjb: ggb
+ljd: hzs vhn rlr
+ctx: jdj nng xzl
+nvq: qgm xtm dpm xdk mrd
+bsf: fcx
+lnh: skq
+qdf: mbh lmz jht
+gjl: xtq drs
+kzc: sxt vml
+vfb: xjg klq
+qtx: vft
+mxh: qmb zhh zdb phh
+hmk: lmk dgm
+tbg: tkt phn
+vsj: kfj dth zmc xgn
+fht: qhq pcg
+mqq: phc
+srt: phh
+dxv: vbj hmk
+dsv: dzx zbc
+sqv: zjm snv cch pvh
+hfv: pkt
+dvr: vnt jht
+lpj: vqm
+rzq: fgf tml pdt
+zdc: nhl fvj rxn bpj qxq
+nnc: lcb rmk cgl btj
+pbb: zld ndd fmx vdz vnm
+lzb: fqp dnk
+bnr: bvg rkh rss
+llp: dpn zmm pnf
+clp: kqs hqd hvj xhl
+cbz: fkd xgf
+fln: hxs hrn
+fqk: xsp qjk
+jqg: jjt vhk pjs
+ckz: zhp
+dcv: fjj tql
+scd: hdb
+pnf: hhs ldb jfn kbr
+zgz: mhf jkf jxv pxv
+lxh: cmz
+svc: chq vnh
+cqv: rnm
+pfr: jtd ndx kqk mjs
+spf: kst xmh fzz pkj
+djm: dss rqh snt
+tjk: rfm nxj mzq djg
+btb: txd xgp ldb
+tgq: vqv phg rxf
+mvr: cnm
+fpz: ngs jnq fmp fbj
+qmn: njs nqz
+znq: jjs
+hzl: lfr gjx fdc klf
+jhf: fgf vth xvg
+kjv: csv xrb
+tvc: jnc
+fvp: qdp kzc
+mhf: prc qxm
+crh: cmc xrj
+kgv: bhd bcr
+cnt: jjt
+hxk: fkb gtt
+fth: gjr hfk mkn dcv
+sfb: sxt qrc
+gmz: kfj khv
+vhq: rmh mbk njr lnb
+ldt: tfg
+fbg: zgr tnd
+npm: kfj sck lsh
+tfg: cvv
+plp: mnb fkh xzd qqk
+ltn: tqx skn dzx
+xlv: vth fzr
+pbr: vrv rtm
+svp: rcx pvv klq rnm
+dtv: kxk
+snv: dgq pgh jsm
+qhv: cnp jzh
+dhj: rbb zvs frl
+jcs: hxk mlh nbj pcv
+cjn: lft pls zrn rln rbq
+kjx: dlz nbl
+mlh: zdv vpq
+lhs: lzn
+cts: nnp fjc
+chj: nxv rbb hps
+jcv: stm
+pts: nvx
+xdr: mmk hzf
+kzz: rcj
+bhs: qgm mcs
+plg: plh jrr lzn hbt
+tlr: hvj dss xlp qqk
+vcn: pmx ccn
+qph: pbr rxr dvc sfb nmm kxf
+jgf: xkf ngs vnm
+nfg: kbt btx
+psh: sdb slk hrr gld
+rpf: szm stx dxz
+jtz: qsc
+dzx: rzz
+dgq: srt fgf
+njj: qfh mcs
+nnp: llj ngs
+fzx: gcc
+gdk: kdg vnm slm
+rtz: ntv fht mcd nhg nlc
+xlt: lfb gmr
+ccj: tgv qkx
+ktq: xvg jsm nqf ppr vnt
+qnb: hsm qqb mxd bbs
+flx: szk dxc dpn nnp
+zjx: pvr pls pst sqt
+tpr: dvx gft psz
+plj: vbh
+vgp: bpj cxq hhc
+cqn: pjj grd
+fqq: fzr bkb
+sbm: xqq hmr rmh rjs
+jpj: sjs mqn fzz
+xmf: qhq gkc vzn fnc
+zgq: ldm hjp xbm hbb
+mcg: qnc
+mzt: sbp mrq skn
+stg: trq mfb
+khp: fjc vnn ltm dzz
+njz: mff lzc
+bjp: qjc
+kcx: xfx flk jlv bqc sld
+ltk: pnh xzd jzq
+zgg: cxg jjt jgs ttx
+grq: tfg mnd fbp
+frs: jrc zmt xxj gjk
+bng: qgm llj tfg
+pxj: tnt sds ntn dgc
+rbp: jjg rnm bbs
+pkm: cmc ppd
+tnt: kpf mrg gvg
+dxb: zgb sjs drk nvx
+ttt: pkr lms vjg phg sns
+cmm: fln cmz frg fjj
+gnp: gmg dbf mqq
+kjr: zdv rcq pnt
+dql: nxv stq chj
+ctj: ppr
+nhg: vbk vgx
+ctf: xmh qvt
+dtp: dlb lzq nsz gsd mhq
+jbt: stm phn
+tzs: lpk dpn scp
+jbd: bpn vcn jtx bjr
+rsn: xrb mxj blx
+vlh: mpn xgp ffc dsh
+fsn: kbm jqj
+ddb: prs
+xvs: jnc pjr rgt hfn rcx
+tpf: dxm fxh
+jzh: jdj xxt khk
+smg: kkt
+nrx: vhh hmz qxm slk
+hln: fqf dvc mkn svc
+pvv: tbg slk qps
+cqb: kbr bhf
+dlb: jbh
+kfc: xcb xdr xld njb ppp
+bjv: fdv qkl bbs
+gjx: tvj lln hsj
+rbj: kfn sdf gdj rkn jqq
+czn: lcs rpb stm jcl
+smb: vdv stg zjv npb
+mxd: cnk
+xlq: qtx kzb cvj
+dlj: hdb
+tkt: pgf
+zjg: cgm
+mxt: ngn zbd vkp
+qxq: tgj vtr
+vbn: fzr klf bkg
+bdj: mbh zgb trq
+rsz: lmk czs zxr
+kql: qkg mqv
+cvt: vnh qxr srl tvd
+vfv: sld bnj pnh nxj
+lhz: zbc
+szm: sdf ckv zdt
+czj: hgc rxg vml
+zdb: bjc mgv
+csj: zhp
+ptg: fzx ljr cfq
+mrd: rjs rfs cbn
+rfr: hdm snt ndx
+nhv: chq
+btk: qfh pjg mng
+tnn: sch tzn dql
+bsc: blx xzp nbl kfz pjr
+cdb: xgf tjb mvv
+gkc: xlr zmm
+jjg: hrn
+pkv: cfk kzc rkk
+ldb: pjg vfb
+mbt: gmg dlj
+pst: glc
+kmp: lxh fnc hhr xrj
+cvj: skn xqk lnz
+rkf: hvx bmt vkp jhr
+pkj: lsc pmb
+trg: fnv
+rkn: srl
+klg: zvx rxs cnt nxj
+zbf: bbk hfn rrm mhx
+xld: skh spc jcp
+thv: hbc dqx
+szx: nsh vpc xcs
+fnc: gcg
+fxj: vjd phx pkp kst
+cxq: mff cgg
+chh: bnc qxr jkf nsh
+bdv: tkm tcc dxv
+cgq: kqq
+lhd: fnz prv
+tdn: lhg nsz pms zgr xrd qjc
+vhp: khv pls fvp kxh
+dqs: gtk jcv bhs nrf
+nzq: qrk kql rkk nkf
+xzp: lhd qfm cmz
+tps: bkg kzb bmt czs
+rtp: vnm pqz qgm hhr pgf
+hqd: cxg rlh
+zdh: kqq rlh
+cbt: jfl nmd mhz ghl
+xjn: cpp jcv zls rtm
+ngt: nrk fqk fms jrt
+xng: vtr bjt
+lcr: nbj lcz sgj qrv
+vkv: rjh dbq
+tts: lrp rsz rlh pnq
+pnh: rzz
+lrp: vbp bkz
+vxs: bvg ntz vgf cnp
+jqq: hkv xtq rzc
+gkg: glc
+dnf: xks hgc bgg tbg tmj
+bvk: ldt
+jvs: mxj hbc
+zhx: xzj qtx fzx
+bpm: cnk qxj jzc fdl
+gqp: ckb
+dsr: xmh msg
+ffc: nnp dmm
+xnr: rtm jmd brz mxj
+jmh: kzc xrj rjt qqd
+mcs: fct
+ftl: sdf dcr vkq fln
+xsl: hhc
+dxm: lms mhq
+lfn: lhz vtr vbh
+sjs: jrt xlv
+nhl: hpf qnn hxl
+mlk: btk
+rxv: zhn ctj lgm
+jsf: fzx dlb gms phx
+qnc: fzh
+vlp: tkc kbq
+njt: mcg
+fjf: phm tgv
+pxg: skh vhd zpt cdb lxg
+srk: rsn dmb fpj
+ftd: gpj shq cst njz
+mtk: jmp jjd
+sdn: mkh scj fzj
+gjj: pkr tpr tvz sgq dxj
+dzz: vrv
+gjr: rxr zqm cpb
+rbb: dgq hvj
+scg: jrc srl jdt chq
+qmm: dbq pgg
+hfk: vkv gkg
+lbx: vhc zbc xvg qdl
+hfs: cdk kfl cqv
+tvz: mcg ncd hmr
+dkr: rcq jbh ntn
+hsg: gcg cmc fnc
+xcb: lcm bbx lln
+nvl: rkp tnn gdl jvd
+rfs: vdz lxh
+hjp: jdj
+vng: dss mrq
+kqz: qvp jff
+stc: jst xqm klf ltf nvx
+ctv: fqp pmb scn rkf
+sgk: ckb vtm vjn pmb
+fzj: xhl
+fdc: rcj nxv
+czm: dlt xxn
+xtz: bfr dmb rbp klq ghg
+jxk: ntx gsd lxk cvj
+ztm: zvq xtq tvc zkg hfk
+cnd: sxm dcx rkx slf mcd
+vqv: zjg gvr dss xqm
+bnk: sdf cbl msp rxg
+lnx: bbk lpj
+hbt: nsz hfc dbf
+vqc: qdl
+hmc: vdn slk dsh
+jjf: xnk ntf gqb lft dvc
+tch: dzc znq
+ltm: rgc hzs
+cfq: hql rcj
+zjs: llq jxv tch rlr
+qgf: stj
+krh: bgs
+ncg: gsk gkg bvk lsm
+fml: jdv czp mjk
+kfl: lsm skq bsf vgx
+skn: hgv
+fms: trq hvj
+xvz: sxt nsh tql gtk
+skk: dkl
+ktp: ldt
+gsg: cfr pcv mzv
+jqb: rcj
+xzj: xlv rzf
+qkg: dxz
+jbb: hpf mgv
+xtm: fdv
+xgp: ngs ppx
+sdv: sld mnb xsl xsp hzn
+nds: kxz bjc fnx plf fgb cfq
+rlc: dks vxs vgb nqz zpr
+snf: hql drk zjv jcj
+bgx: nbl
+zfm: djm qtr llb
+xjb: hbb dzc rkm pst
+cdq: rlh bcr lmv
+dlr: gxc ljv dgm
+pqz: vhn
+mmk: zfh
+fqz: kxz rdv bkb
+cbg: mst fgv zvc vpc bhf qmm
+chb: mms nqz bvg vgb trg xxz jjf
+brs: rnm glc
+lhm: vzn jjs
+xbg: vfb msn
+qqb: mfl
+zqm: knc
+lgn: brf
+ssk: lpl
+gkq: mzl pvh xqm npb
+kbn: vtr tbs
+kxz: cjg
+phr: vgf sdz mtv
+ndd: tmv zdt mvf
+jct: jcl pll znh xjg
+qxz: xjv fnv
+bvp: scn kkk zpt gll
+btj: jdt
+nnk: nrf vbk
+kft: mhf fdv lhd njs ktp
+ffh: fxm cjc vfv fzx
+szr: mvb qjk
+hkv: bvg
+pmr: khp vtv nrx zvv fvv
+smq: cnt nbb snr
+vss: rvn xqm
+vjz: kqz dgm npb stq
+kbr: dtr jcl lpl
+dth: znq hrr qgx gqq
+cht: nkf zrj
+lnb: zfh vxh ssn
+mtn: dxm ftc dln mjs
+sdt: ppt mzh tjs spg
+skd: njt
+lfr: ltc flq jdk
+vlc: gqq cqb ktz jqq
+kqp: ssq hmk pgz lsc
+crv: fmx szh
+kqk: frl qnh bnj
+thd: jqs scd dxj
+gzq: srl
+mzb: gft fjt
+vnm: tmj