diff --git a/package-lock.json b/package-lock.json index 2c04e78c..9b9ddbec 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,6 +9,7 @@ "version": "1.0.0", "dependencies": { "@datastructures-js/priority-queue": "^6.3.0", + "@graph-algorithm/minimum-cut": "^2.0.0", "@shahata/inquirer-timeout-confirm-prompt": "^0.1.1", "chart.js": "^4.4.0", "combinatorial-generators": "^1.1.2", @@ -563,6 +564,15 @@ "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", "dev": true }, + "node_modules/@data-structure/deque": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/@data-structure/deque/-/deque-9.0.1.tgz", + "integrity": "sha512-/LSOEPmWGZ10OiKfje06GNDM/fzbY1ZfXyvZKr+/a79ZTlGoTwsQW1uPvtmQDtBzs2h2VbPjHho4zNSP5YH0Zg==", + "hasInstallScript": true, + "dependencies": { + "@failure-abstraction/error": "^6.0.1" + } + }, "node_modules/@datastructures-js/heap": { "version": "4.3.2", "resolved": "https://registry.npmjs.org/@datastructures-js/heap/-/heap-4.3.2.tgz", @@ -632,6 +642,33 @@ "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, + "node_modules/@failure-abstraction/error": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@failure-abstraction/error/-/error-6.0.1.tgz", + "integrity": "sha512-KvIHhvwfrgbUduQbk55WRDGL2XcXjDLwleId+pSnK7mUUIY7zMGMy3N+ouDcOFymme48tKDlarKsYj5mEEd3fg==", + "hasInstallScript": true + }, + "node_modules/@graph-algorithm/minimum-cut": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@graph-algorithm/minimum-cut/-/minimum-cut-2.0.0.tgz", + "integrity": "sha512-FKCejPcMHfr2lM/lTIqT2Yuel97kL2rv4D9UjwHNyL9uB4vqU/cvBEBjCV0tOwKfhCkg5GuBDQqxfjELkOmY0A==", + "hasInstallScript": true, + "dependencies": { + "@heap-data-structure/pairing-heap": "^4.0.0", + "@iterable-iterator/list": "^1.0.1", + "@iterable-iterator/map": "^1.0.1", + "@iterable-iterator/reduce": "^1.0.1", + "@iterable-iterator/slice": "^1.0.1", + "@total-order/key": "^1.0.0", + "@total-order/primitive": "^1.0.1" + } + }, + "node_modules/@heap-data-structure/pairing-heap": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@heap-data-structure/pairing-heap/-/pairing-heap-4.0.0.tgz", + "integrity": "sha512-4wmedekJpr+gkktJ7VnmXTBvJWxvHmWtJT7uvS3cl7vzI4iDGaVVMPqdoWWIPZfaDkgd0kprb6XKBGaO7oFe5A==", + "hasInstallScript": true + }, "node_modules/@humanwhocodes/config-array": { "version": "0.11.13", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.13.tgz", @@ -773,6 +810,50 @@ "node": ">=8" } }, + "node_modules/@iterable-iterator/consume": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@iterable-iterator/consume/-/consume-1.0.1.tgz", + "integrity": "sha512-KVJufzV8/gOnYqrtO4CFdGZopJ5kkUBhzHcbU0iToOv5aTl0igxnsRzCaDSxUgO4q0mDbf9WEfjz4K39cl1iNA==", + "hasInstallScript": true + }, + "node_modules/@iterable-iterator/iter": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@iterable-iterator/iter/-/iter-1.0.1.tgz", + "integrity": "sha512-/C/Ciq69we9C0wvqx0rOdnpXAoSW+UnyIV/ZQrUYDzmtguvUQ4HjiIPcU2Csdh705VS6TMkUhoaBHIGh44V3OA==", + "hasInstallScript": true + }, + "node_modules/@iterable-iterator/list": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@iterable-iterator/list/-/list-1.0.1.tgz", + "integrity": "sha512-234a2cf0a0YhD1Ofb3F0xSjXDkqDK1xCiLnXoMUt/DWAt/odAvJToaxEFMemiKlAUvqF6E8MSi2v2UvlIOpBUA==", + "hasInstallScript": true + }, + "node_modules/@iterable-iterator/map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@iterable-iterator/map/-/map-1.0.1.tgz", + "integrity": "sha512-lUvX8/OCYRdof3eZii8ntJUvqW1MlL2ESkIcQj3cagajKVfBIBj058wE4ScrzQl6U2udMva/n2NwP70smdfZ+g==", + "hasInstallScript": true + }, + "node_modules/@iterable-iterator/reduce": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@iterable-iterator/reduce/-/reduce-1.0.1.tgz", + "integrity": "sha512-/wwXupEhGb0cwVr4MDbuweD5tZ+wtd8fr8HkWwNre1lZn76Utu0um7nnhFpm9Mk3hifZzrH5dcKLhKB3VEuL/g==", + "hasInstallScript": true, + "dependencies": { + "@iterable-iterator/iter": "^1.0.1" + } + }, + "node_modules/@iterable-iterator/slice": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@iterable-iterator/slice/-/slice-1.0.2.tgz", + "integrity": "sha512-r6Z/RPZz4q8GAmqSDlHjTlHpFMDYmBlNQYZ4Rqp7xjn1ihsFVw+7WYH5ivPk11UbE/Inz1ZuBc01/vqT1F9U/g==", + "hasInstallScript": true, + "dependencies": { + "@data-structure/deque": "^9.0.1", + "@iterable-iterator/consume": "^1.0.1", + "@iterable-iterator/iter": "^1.0.1" + } + }, "node_modules/@jest/console": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz", @@ -1742,6 +1823,18 @@ "@sinonjs/commons": "^3.0.0" } }, + "node_modules/@total-order/key": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@total-order/key/-/key-1.0.0.tgz", + "integrity": "sha512-IPrGrxeqP6Oe7b1hrjUzDIWqMiLZV1qmlugbburk4neQKNPyjvQD1WKl0cCNepA20bwS/HrCyCCbRHPAsFm2rA==", + "hasInstallScript": true + }, + "node_modules/@total-order/primitive": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@total-order/primitive/-/primitive-1.0.1.tgz", + "integrity": "sha512-BXCXyXoQIpdwFkplPRTuxFB0I1GHHia4t22bLAEqjdk48DFwQMwSbHq1EdLA81X/eFC/b6RdVxG4Q+WEcfs0aA==", + "hasInstallScript": true + }, "node_modules/@types/babel__core": { "version": "7.20.5", "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", diff --git a/package.json b/package.json index a5d9e34e..07553768 100644 --- a/package.json +++ b/package.json @@ -15,6 +15,7 @@ }, "dependencies": { "@datastructures-js/priority-queue": "^6.3.0", + "@graph-algorithm/minimum-cut": "^2.0.0", "@shahata/inquirer-timeout-confirm-prompt": "^0.1.1", "chart.js": "^4.4.0", "combinatorial-generators": "^1.1.2", diff --git a/src/2023/day25.js b/src/2023/day25.js new file mode 100644 index 00000000..5a93d353 --- /dev/null +++ b/src/2023/day25.js @@ -0,0 +1,37 @@ +import { mincut } from '@graph-algorithm/minimum-cut'; + +function graphSize(graph, component, ignored, visited = new Set()) { + let result = 1; + visited.add(component); + graph[component].forEach(c => { + if (!visited.has(c) && !ignored[component]?.includes(c)) { + result += graphSize(graph, c, ignored, visited); + } + }); + return result; +} + +function toGraph(edges) { + const graph = {}; + edges.forEach(([a, b]) => { + graph[a] = (graph[a] || []).concat(b); + graph[b] = (graph[b] || []).concat(a); + }); + return graph; +} + +export function part1(input) { + const edges = []; + input.split('\n').forEach(line => { + let [component, connections] = line.split(': '); + connections = connections.split(' '); + connections.forEach(connection => edges.push([component, connection])); + }); + const graph = toGraph(edges); + const ignored = toGraph([...mincut(edges)]); + const size = graphSize(graph, Object.keys(graph)[0], {}); + const x = graphSize(graph, Object.keys(graph)[0], ignored); + return x * (size - x); +} + +export const part2 = () => undefined; diff --git a/src/2023/day25.spec.js b/src/2023/day25.spec.js new file mode 100644 index 00000000..5b2230c6 --- /dev/null +++ b/src/2023/day25.spec.js @@ -0,0 +1,40 @@ +import { part1, part2 } from './day25.js'; +import readInput from '../utils/read-input.js'; + +const input = readInput(import.meta.url); + +describe('day25 2023', () => { + describe('part1', () => { + it('should work for part 1 examples', () => { + expect( + part1( + [ + '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', + ].join('\n'), + ), + ).toEqual(54); + }); + + it('should work for part 1 input', () => { + expect(part1(input)).toEqual(562978); + }); + }); + + describe('part2', () => { + it('should work for part 2 input', () => { + expect(part2()).toEqual(undefined); + }); + }); +}); diff --git a/src/2023/day25.txt b/src/2023/day25.txt new file mode 100644 index 00000000..562482f7 --- /dev/null +++ b/src/2023/day25.txt @@ -0,0 +1,1209 @@ +llq: tzg +dns: dkp +fzx: hsc +qvt: dqr mzz spl +gvq: nql mmh ngb +nvc: gkt rhz +dvq: zqg lpt fdm btx +ghj: nnd +znm: ggz fqd ptj ztp +llg: pqx vbf szn zcr +nsm: cch fgv +fbq: dbv tts ltb +kbc: nhr jjj +vdf: vct +fcq: fnv tgd ltb hjv drn mss phg +fqj: gjh +xhj: rqs zhk +qkb: xbd hlx svj rph cbx +kgr: htp rfz +rhj: vdt pxz hzj rqs mll +cgb: rdj tkc smj hgh +vvf: dlj +gxg: vdh hlf hlg +cnz: vtf xnp ltl +hsc: jnd +lcf: xtv +ptr: qfq xcm zzt +rph: tpj cgh +gkv: xkx fnq fmh vpv +rkp: vfl rrs cjl cbz +rql: mdh plj xrq +sjd: jvx chn bbb +ptc: srn qgx xrd cch +pkr: qcn cfv stg ssv csr +tkx: chv dsr cgh +zhb: sgt zmb lbl +pjp: fjr kbj cqf +kxt: rrz nlx +kxx: tth sfh +qqd: nht mgm fqj xkh +jnj: qtg xpf dns lph kfs +knj: cjz qzc fzq lfc +mpr: nvv tgr kkt vkm +jkz: cpr hdn pmv djt +fth: qpx nth fkx hkl +vbs: crr chr vpn mjv +bnn: xcr glv hnh +rvs: hqd qmr +xkb: mfn +qml: lnk dgh kch lbj +cls: lsq ckn stg lrd +nhh: jnp nsh xds tth +nsk: fhr tfr +lgs: tth czk +bjg: tfr nmq +tjx: zht fzq fkv rbx xtf bjk lgs +thk: nth fff +svn: tbm jzk nld sjp +fkq: bxp kbc cps dtd +prx: jfk tkv +hjb: ctl pbx lqm kzm +vfs: mbj +ggh: slj dns bkf +rns: dmv fmb lcf +lxl: jvl rdv mpf +bdz: xxs +mtd: nsr zgd fqb +dkd: scf xqh xbd +mnc: qrl qjc zrp +ftg: vnk +vfd: xtv kds drk szg +fck: lrv tfr nvc +ldm: bdr skj xgv +xmt: bxp lcj kcn xvv +klq: xqn dch hpc ghj rxl lsh +fcv: bmv pzb hxk thc ndq +fmb: nnm +fvv: vdf +lxb: vxr cqp +xcs: ngx qrj flm rqs +bvk: csn qnq +gpc: bcd +tkv: gjf +sds: sbx glb pzd frq +gxs: lfr hpc vdt +slx: jxx qpg dfc +zjf: nql +xvv: rqs bnn +bbp: gtv +zlt: ddl btz nvj +bmd: kcf fjr +dkm: qlb +hdr: rqp lxb dvp kfn +xqr: mmh +hlm: kqj rxb psh xrd hkz +jgz: jcl gss nnd rdj kfk pfh +qgx: ddr +lxn: mmf snd lfc ltb +zjp: ctg zdx xdv skc +qgt: cdb ngq cqg qpg nqz +pvj: rjx xkk +zgc: grk bpd psh vct +ffc: xhk vnk kfx +bvc: phl glt bxl tgs mmr +lxz: nlh mfd dmv +qrf: hqd lzp fbq cpp +frj: zpb sks rrp bfg +bmm: rsn jzj qkk xkk +lqv: ghj cbz mnt pnf +chr: stz +nsr: jnp +sbz: khx qnn vdr +kxs: hqn ctg +drp: rpc bng +jlk: pdz +plh: gsr tpk nfr bhm +hpm: bkf lsq +ths: jpg pmc +gps: zmb hsc +jts: vpl gxm fnq +xtc: qpl qvk +hdt: tbc jpm stz hmn +qzl: lld fck hcx +rmd: fxx mvn jks cbz +hsh: glj +cdf: qnq ths +rjh: lsc mzv hbb qgx +jmd: nxm xgh ndt sjd +htk: bch ckh xgs rvq +qkg: njp nrz bml dpt fmh +vkq: fhr +drk: gtj cps +jqq: scf +qjv: blr xck ffg pmz +vgv: kxz ssb +dvj: nsm cqc rnt spg +kkt: gpc fqc gzp +cpj: rbl vxd ldf fqh +scs: cjz ntv +lnv: qfh nvj lzp +kjg: dgc vnj sjp +rcq: fhd nrh +smc: ckh rml rfl bfd +nkv: rfv rrp +fvm: mmr +skt: pfv +jgs: mjv fcp xtn +pxz: sqn +nkt: msq bfn cqj rql +nxs: ctc pbp +qhl: mpf xjf rfl lrv +fhl: qrl npg qfj +vsb: zht pdb qfh jmh rdr +xvp: krl lhj +khj: thd nlh dch dgh +fgs: fbc ltm +qlk: thj xcx bfq +fnn: khd xsz xxs +kpq: jrt +bck: fff lsq cbm +dbh: gxx lsc +nqs: dkm zmq scn hpz +mrn: tsc djf kxs fmz +scn: tgr +qkc: fbx bmf +str: tqn +ftt: xst cms pvc qjg +qbn: blm czk +spt: rvd bbn gvq jgs +qnn: rhh mll +ftv: rzd vkd +hzk: bvh kpq +tpj: rzj +vgh: qpl +ngf: mqn qfq zth +zkp: lnd glb +qpg: nql gbx scf +rhz: hnq dqr +tqn: zkm +xkk: hmv +vqx: zth rrb +vjk: rqh dps fmb nxs +cbp: pkd kgr kbc hlf dpc mdf +snc: glj mht fff +dfc: tgn dbv +ltl: fsp dbs +kbg: vqc cdn dpg +tkz: kkv +czz: hpc tjv fft lsh +sqz: pgl njs +kkr: bxb qng nns +bgm: knm jfg mlk +kcf: rhk nmq +cjq: tjv cvj lls gct qcn +fjt: jvn fkb mqz dbh +kgj: mgq knk bjd fdx qgm cpv +gsj: dld jtv +xfg: jbq hrc bmv dkm +txl: vvh jcm vgv vnf ssh +xlf: vcq grm +jfg: jfm +cdh: hxk pbr qfh dgd +bcb: mqf jcl kkk +vbv: csf qxv jxx nkq +hjv: xtc mgn +gsd: khp lsc plm sjs +mns: qdh chv +vjr: qpm +kxz: mll +khz: xlf jkm gxs +rvd: vdb nrl sgf lnv tkz bfq +bhx: fgs ghj tjv lsc +bnx: gjf fqv +mtc: jrt kfs +bxn: dcf lzg +dxk: nnq zkm +tqj: nql +qfv: spg xnp +zrf: grm kkc +vfr: kmb psl +xnm: kxt lmj xtc ngq jjv +bxb: jcr gpc +hbh: mvn fft sth bck +nzc: nfr rgr psh +dps: gtj fqx +xtd: nzc glv ltl +xhk: fjq mbj +ljl: fzx dqm +xkc: tzq +qnk: jhj zkm psl fcs +xgd: rrb +qlj: vqc nhz kkc +vfl: snh +nht: phn rvq xkx +stg: kpf +mpf: lnf lnx +nnk: xrn +nch: rms fdx +vvq: xnp +rjv: gkt gnt chn +dhl: nvl vfs rzd kmc stg +fxp: jzf thl fzh +jfq: dpc dcv bjd dfj +zlm: xcr qnn dgh +jmh: tqj vnk +jdc: xzc jrb +xpj: fcj vnv +zmq: bfn +fjc: njp lxg rrz gqd pbq +cgh: scn +kvn: grh lqm jcm +gkf: kpf htp +chf: llq thl mpv +srj: mfj zgp mmf fhg fgb +hcx: mgn rhx +dvb: lhj hxn ptj gkb +dcv: hcb rxb bqv llq +gdx: qlm xqr vfg +bnj: gcr fdm dkd tkq +lbh: kts khp +tmk: xqg glt pnf mjp +gln: xjq trn lkc +fhp: hxk gnt rxh tqp +zgh: zdg ggz +kmv: nch +rdr: zzv pdb +vbt: qzj nbq gxz mkz +hsr: kld +mgn: crz rhk +nlx: dfp jts +tpk: hfl kkp +sjs: tpf lxf +mls: ttq qcq bfn kmf rbl +ddj: rbv szn sks rrp +bmn: kfs lfr bdz +xcq: gxm scs xqr hsq xcf +hbp: pjp jzr thc gcr dxm +dtx: gvx rsg jdg +flk: hmn xcc ldx dxn qdh +nzn: grm pbq +jht: psc vzj hsr fcj vbb +pbz: nxs cch lxf rfv +rrs: fxk +zht: zmb +lvj: hjv tgd rhz hbv +ssf: qvt ngt str jdc kpx +nnx: lxf rsg xdt +rjg: fbt rbv vrc gsj +lsb: hmn vvf +ngq: qhs dkz +ndt: mbj zjf nrx zgv +dgd: nsr ddl gjf +bzr: pkt tdq csj +rxn: xcm zgp +hvd: lxf znv lxs cbp zqr +jcg: qnv +lxs: pdz +jvx: nrj +zzf: xgl gbx mhn hfs +mdf: fbt bqv cpr dvp +dqv: vbj mlk pfp nnk +tpf: fmr +dcf: rsq +grb: hzc mvz mht +xgh: scn lmj +kfv: dcx rpl +hcb: jlk +jpz: rxl msb bcl tpk ngs +kpv: kzs ftg mtd +kqs: vvh lxs lhr +lfj: xpj bqv +nst: zgh vdb zdg dzj +trb: mgx vvf jvx +kcd: brr dbj mbm +bzq: kxr lhr fmp qrk +stp: glb jtc nnd +dvp: xrn +dtr: fkb tsm +ssc: vhl xqh chn csn +pkd: xzn jkz glm dks +mkj: bqz hcx cbx +ksj: glj cmg fds +cgc: njp kfx fqv kpv mvt vqx +ctc: pfv czr lqf +mvp: fgv hzk rts +sln: vjr vnk +jbq: rxh njs lld +trz: rfz sgp +ldr: fmh hlx mgm tpj btz +njs: krl +bmv: dtj ckr lsb +jcc: fkx jrs +lvx: zhk jcg xzm +qfq: dgc gjj +bqd: gpv zlt mch txz qdc +qgv: mvn hzq kzf zkj kbb +jml: mmf cmp rmr llt kmf fjq +nrx: gdj +cmp: mdh vfr xcm lzp +kpx: vmv rfl qzd +pvv: bdc nzn gsm xrl xnp +bxl: fkt sqd dhq +xds: dfp ffs rzj +fvf: xtn +cps: qpx hsr bmn +fmp: ltv +tdp: lqf mht +dsv: mch +trn: xnl +pdb: qpg +mcr: jpg nkn jmd ssc +trq: jzf mvz +hfb: mns hhj tfr rxr +sfh: mdh bjf +qtm: tjh +xdt: qnv rsq +fbx: vfg tkv +hlx: dqr +rpn: dxl jfg mcn +xtn: mdh +rmt: mzj fns +fkt: ssb sth +rzx: rnl +lbc: gck +ngx: hlg +qcq: mbm bbb dsv +kkz: dmt qkc jvx +jcl: qxc +sgf: hqd vfg +lkk: qfv xsz csr +thj: xtl lrn +zqg: tjh +qzz: hbv srj dgg bts +ntq: xtd pbp lpl jtr +pph: xjd jhq dfp mkj +fgh: bjf bdr +hhp: tbb ptr +cmd: nmf pzb zlz hcx +mlj: lnf tzq +nmf: zlz fkv +nbq: mrm +ccx: trj xcc khb +jqg: hbb +vdm: krl zgd gjl fgh xjs +zgv: vgh sst kmb +ppx: dhq gsc ltm +dkq: czk cqg qvz +xhl: dbx jfz tgn nkn +rqh: ftv mlk +vjt: gkt lpt pkv hqh +njx: vbr kcn ltv tzz stp +zcq: dkz tbb fdm ldf krl +qsk: mjb skv +xsc: dgf +zcx: qng bbn xst phg +nrq: vhf mgk gpc +lsq: hkk +zxc: dks gkj vdh +lqj: gdj +nhr: kts jcc trz +mfh: srs lrn ttb tmz +xqg: ddr hbh mkz +qrj: tsm rms dcl +mkq: pqg qkg xhk +tsm: rmm lzg mrm +xqh: gjh +jgc: qpm +nbc: hbv bcd +bpd: fmz gtv +trg: bfk mgf +dmt: fkk vfs +crx: cpp ndt qdh mqn +qct: tjh +ntg: jzc jdg +zdx: fxx kcp +klb: xrq cqs lkc jnz +sqd: snh +hzq: jtv +ckr: vkq nkn jzr +tdm: hqn jxd xhr jqg mft sjl +njr: fgv skt czc cqh qkv drk fnl cbz +gsr: qps tzz +tkc: fgc gxz knk +kmc: khx htp hdn +mpm: bdc qjb fcj +xzp: vcq hkk fmb bnz +pfv: pdh +qsm: mlc lsl +ztv: hsh msb ftv bnz +pbr: bqz +fvg: xpf +cbz: lnk vfv +qsh: nrh rjx zdj dxn +rlf: thl mtc lcf +dcp: sts jzc qmj +jtf: csn +vxr: knk +gbz: hmn qng hhj +fbg: nsh rqb +fzq: fzc +gjj: zmb rrb +mlc: mmr +hrq: jzr qpm +htr: hqh dmt pzb xck zjt +sgt: dxn fbg dzj +kzs: dsr +qpx: fmr +xjq: fbm xkc +rnl: tzr qlb vgh lqq +ckn: dkj +hzj: bvh bnn +msv: kxx vpl dfp +hlf: vct +qjb: kpf +clh: bnv kkv mgf psl lbl +qpf: chv rxn +rjl: jrt zxc +kqp: fmr lsm xql hpm +znl: bfd dvr ttq zgp +lhn: zkm xkk +dqm: ttk vkm bvk rhk +nxj: phr pjp tbb rvc +jsd: rqh mvp rxb kgj nbd +zzc: fzq bkg thj +mnn: mbj rxn jmh jxx +tbb: fqb +dkz: tbr lnf fbm cqj +rvb: rxr jcr +lmj: fqh nnq +jkm: vcq bqv gkf +ngd: fhg xcx +xst: chr dfp dkz +bds: cqc +tdq: rpl vfs +khb: pbr +glh: tzz glv kzm +tsj: dsr xvp hrq +dbs: tzg +ttm: hsr skc xtj rqs mjp +jjv: bmd jtf qpg +dxn: gkt +crk: cch xxp +pgh: hrm tjh jnd +qdz: ntg cdk dcv +crr: fqb pmc +chj: pzd kxs hvc dhl +thd: lnk xbn +hzc: flv lfb +rfv: xxs zsv +vrc: flv xmt sgr +jfm: sgp zdx xnp ssd +lmg: ckn fmz jkt tcm +kdc: dfp +qkv: dch +cdx: rpn xql lfj pfh +npp: vmn lxb gsc mqz +gtj: bcl hqn +pxn: jzc mfl ntn ksj +bmf: nbc hnq +zzb: shk xxs +hdn: rrs gxx rmf +ddn: lqq fzx mzr +gcq: nvj zmq hbv rvs +qgd: hqd qgg bsc gvk rhx fmh fdn +sht: lcj stg zqr rts +jpf: gcr trb lrv rsn tkx bng cnr mzj +lnf: trj ccx +tqc: lqm dpg +qlv: kld kch +tbm: qpm nrz nld nsk +tmz: nrz prx kkz xnr +ltm: hlf +qjg: xnr pgl cqf +shn: hlh fxp mjb +csj: bvn zgd fzx +xkh: htk qpl cqf hlx +lzg: jrt +skj: bbn ngf vrl +sst: lzp ffg +tgf: lxg fqh bst hhp sbq gjk zsj +kbn: vxd vkm fvr qqd +cnr: qfj qpf fqj +clp: prx pbr tzr jnd +bxp: jks +mfj: xqr bnv tbr +bqg: xtn ttb +gkb: qzd xqh fbg +xdv: fjs +rbl: tpj hbv lms ntv +bst: cqs qkc rxr +bpl: tsm nlq vxr dlb +gdz: bnz znv fkb +qzc: xgv cdf dxk +rzq: zkm gpl fkk +pqz: dbv kdc rzx mns +hpz: pmc pmt +rmr: lnl nld +jtv: gxx +hzt: vdr zcr dpg rxl +xtf: llt kbj +bhd: rpc vkm mgn dgc +mml: gxg rjl +kqj: mnt rjl stp +kvr: rfl lqj +dfx: tnt xxq cfv mcn +kkp: mqz rns hkz +nzx: ksj pjv dtr bgv nhz +knf: lsm ssh cdx +mbk: bvn mgx dfc msv pft +btd: kzd rmf ggh sgj rsg +sqq: xrt jpm +blq: jqg nsm cpr +mtt: mjb qtg hrx kmv jsr +xch: zqr +kpg: qnq tct blr +mfp: rmr ffs ltb qzz prd bqd +xfc: bmn mkz fqs vvq +bbs: cdk fkb +pzq: jqg spg vdh vrr +trr: mgk rzj lqj kfv +tvp: slj tqc lsh vgv +xpx: ssh hgq zpc zhn +fjr: tbl +ssv: khd lsl tlp +ffs: fqv nld +fxm: sjp fcs vnj nfn +mzr: ldf ttb +hkz: bqp +srs: jqq njg vhf kgx +nvz: drp dbg +rbs: gck skd fcs bfd +xbl: bhk xgd jzj jvl +ldx: ttn xqr +cpp: xgd slx +jtc: bqv +jhq: hxk +xmd: dgf mkz nll lcx +xrt: ggz dpt +phr: xzc rml zjf snd +tgd: rph xls qsl +vlm: msj gxm stz cdf +pqx: qsm dxl kpf +lqh: xrt gln btx jrb +gjl: dbx fck scf +lrn: shm +fzt: mvt sqq cqf fqd jqn mzz +njg: rml npg +drn: rdv bch +jxf: vpn tfr hrm +vtx: fcj fgc +grk: lnk dhl lcx +rdd: phn scs bmf ngd +kzf: dtr cqp bbs +gcr: bcd +sgq: hsc qbn trr +glt: lkk +rml: vkq +mcl: vdc nrz sgf xgv lxl +hfs: fvr gqd +qxc: fxp nth +pkv: mfn +tbc: vvf +cfv: fgp +mjp: bqp vcm tdp kcp +xrl: ddt znv vnv bxn +khd: mtc grh tzk +xgc: lfk nfr xcr znv +jdf: dtj scf gpl +bbn: vqx mzr +hmv: tzq +pzz: rvp zgr kcn nmg vdf +ngs: gsc +jvn: qrm vcq hgq +srf: kdc lqj njs +rgd: tgd vdc ckh +xtb: ndt lfh qqt mkj +rlp: gnt fkk kdb +cdk: dvp +ctf: pqr vfv lsl +dkj: vgv drq +jhj: gjf zxg dsv +cms: gln tct tzp +jxx: dvg chv +xgl: cqf vpn dsr +czk: ddl +ddr: dks +rgr: flv gxg fmp rzd nch +mxq: vxq lxs qcp +rnr: nmg nnk dbs +dxl: ssb xdt +zpc: jsr skc xvp srn +krd: knj prd zrp tqp +fbc: gtv glv +ptk: prc tsc grb nsm +nbv: xch tpf xjk llq grt fgp fnb xdv +xcf: fns kcf +fds: bbp sqd cqc +jtj: rxl hhm cdx tpf cqp +dtd: rlf vnf cpv gkf ngs +vtb: spg sjl sth +vzj: skv cjl +ffp: ltv jsb +pqg: vfg dgc bch +lbj: gxz hsh +kzd: cqp +hrn: bds nvl kkk +bdr: mjv +qsl: xzf nrx chr +dxv: ppx jtc jcc +hsq: ndq mtd dpt +qrl: zxg +kjs: vrl gkb xsv rqb +jxp: xjq xls xtf fqk +vpb: zth hmv crz lfh +grt: xpf tpf +lfc: mqn tth kmb +sts: drq fzv +bkg: tkz hcx +rzj: ffg bbb +qdh: mgm bqg jtf +clq: jks jjj vnf cpv +sfc: rcq dvg mmf +lfh: qnq +lsl: lxf +gct: gss xtv qxc +bft: hbh qdz czc qkv slj fpl +cpv: ltv +tzr: zmq +blm: vkq +vdc: nlx snd +nhz: bnz dpg +jcm: shk +mzv: ltv rxb +sdz: zmq dcx zft hjc +gxm: gbx +pcn: trs bch +jfn: bxp gss txl mqg +nns: tgn dbg gkt +nfd: fqd hqh zfz +mch: klc bdr +hpg: kxz rnr xnp pdz +vxm: kcb qbm xpj nkv +svj: rvb kxt txz +dnj: qct ljl zkm str rjv +lhj: hnq +vrr: xhr +xzn: hpm qsm gzm +xxq: hfq fxx +fns: gjh +mcn: rrs +kjj: nld dcx jnz pmc fbm +hpl: fqd rpl nlx jcr +rbv: nnk cch +mss: mgm tgn +vbb: sqn gct lbh +dfk: scn khb xsv mjt +kkc: pdz +kdb: prd xnr +vxl: kfk mfl +fzb: msq xqh rpl jnd +gjk: tsj rlh ths +hgq: dgf +glm: sgr xjk +ccg: dbx kkv vks pzb +hfq: cpr hhm +nqz: fqc dkq mnc +smt: tnm mvz mlc kkc +qfp: xnl mqn pmt +sks: jvm +cbm: sgp gtv +nkq: qpf lsb vhl +mgq: lrd rsq ssd +mrm: jzf vct +vlj: ddd csr gtj xhr mpm rdl +kkv: rrb +tcm: nbq hfl zlm +fpq: qps nfr jtv bcl +qtg: xsc jcg +lcj: vcm dkp +dkc: xtv cdn hfq pxz tjv +mhs: hfs mjj vjr xjf +xpn: qng bnj mls vpl +nlh: fmr +ltg: mlj qpg zqg mbj +vnj: zsj nrj kcd mbm +rpc: nfd dbx pkv +dnp: vdh grh jsb +fsh: str sgt rxn cqg +sjh: qnq cbd vhl +qpl: brr +ktj: dck zpc bbp +hrx: qcp qsk fzh +lth: mmh fkv ttk +jhn: kbg qgx hrx fvc +nfn: njg crc klb +ntn: thd mml kfk +ngb: rrb mdh +frq: mqg dck htp +qfh: bvn qct +kpl: fnb pfv kzd +tkr: phg gbx fqc +fcs: xjs +bjk: rbg rjx +zgz: rdr bjg +zlk: vvq snh rsg +ttk: fdn +fnz: bjk xjd qsl cnk +rbx: fvf +bfk: rmt lkc jfz +cqh: ckn lvb kmv +vmn: rsq +pzd: xrd +zvg: nsk trg ffc rvb kpx +gnt: fqh +zjt: jzr fqv lfc +lqn: fkx xhj fsp kmv +dvr: zmb rhz +vjp: vdf lqf +kgf: fgv lkb trv dfj xtv +pzr: mpv slj djf xvv +lrd: vjp +zpb: pfp bxp drq +bfq: ccx cdf +lzk: cdn dtx mnt mfd +fvr: dbx trs +hvc: fzh pmv knk +gnv: mmh fnq vfr klc gqd +xvr: flc jxd hkk rmm +czc: fgv hpc +fdn: dlj xtl +qjc: qzc zgh thc +nzf: lgk jpm kvr scn +zkj: kpq xhr fnb +rdj: rrp jcm +phf: knk kgr vfv +bfg: bds jsb +nll: xhj +btp: vhc djt qlv vbf fmb +sxb: pxz dck bbp mlc rts zhk +jqn: jvl fkv njp +slp: vmv fhd lnx sfh +zcz: snh rjh xjk pdh +qjn: pgl kdb ttn zgh +jzj: fdn jdf +mfd: lrd +pfh: bbs xlf +ssd: vbf +txz: cqf gjf +knm: zhn jdg +dbj: rjx fhg +rvh: mkz hbh xmx +hhm: crk sqn +dts: lbc qzl dsv rzq +crz: ngt +mjl: kkc vzj mxq +hgh: kts tjv +vkd: bmn bnz glh +mjt: snd nbc +qmj: zlk pln srn ltl pvz +mjj: lgs dkm tbr +kcb: mjb dxl dps +jll: knf mmr lvb vtx +bqx: pqt sth +jrx: fbm vxd sqq +qtl: xcx spl dxm fkg fbx +cbx: tct fcs +tfr: shm +klc: tbc rxr +xvj: mft jxd sgp mtt +dfj: fvv zsv +zkz: fgp gsc mfl gtj +msb: xsc dbs +jtr: nlq tdp vlf +pdh: pfp mvn +tzg: lfr vfl +jfz: zfz +ttn: sln vrl +sjl: sqd +smj: tqz dmv xjk fnb +vlf: mvn vmn +fqc: gkt +cbd: xtl +sjp: mqn cbd +fqx: zcf msb +jtx: qlv pqt xmx hjb +vhf: xnr mzj fvf +nmg: jcg xsc +mlp: crr pph hbp +trv: fvg fvv ffp +qhs: xcx nsr +mgx: bnx ffg +vpv: jrx cgh mgk qqt bbb +phn: shm +szg: glb qqg +jzk: pvc ftg rmt +bml: xjq bdr dbv +fbj: xgh kgx lnl fcp +zdm: rgd qlk zgz bml +lms: fzm pmt +zsj: fzc lhn +ldp: jsr szg trp nkv +crc: lfh ddl +skd: nkt cqg hpz qzd cmd +ntr: lsc fdx zkp zzr +kgl: rnt hxp zrf fft lcx sjs +zrp: jhq +flm: shk qjb gvx +mqg: fbt +lnd: thl +trs: cqs nsh +bjp: qzm nbd trz fvc +tpn: dkq kpg vfs ljl +xck: xqr fkg +jjp: lfk gdz shn grt +cgp: fbt bpd zcm jzf +pgq: sgj rkp lvx qlj +nfz: rxh qzl jnp hrq +pvz: ngx bnn mmr +dhq: tpf +xpm: skt vxl gkj gxz +zft: tdq ffg znk +qlm: hmn jzr xkk +mdc: tzp dxk mlj xzf +vcq: qkv +qxf: bpd ltx mqf dcf tmk xql +nrl: hmv dxm ngt ttk +gvk: fsh fjr xlc +xtj: lcx fkb kvn +vng: xjk mft vxr cch +bhm: phf gsm lbh +fdm: phg jrb +dpr: mbm xgv xsv gzp fqj +pjt: tbl pcn jxf gcr +ztp: tqj hnq jgc +llt: dlj vrl rzx +vpn: tzr +fhd: cdb fgb crz nld +zlz: vhl pdb hhj +zkb: vgh rzx xnr pmz +bdd: tkr pcn kzs gjh xjd +dck: bdz +vkg: lms zth htl plj lnx +hxp: dkp bqx ctl qpx +qkk: xcm lsb cqj fzx +sgc: hqb hdr dns hzk +gjg: kfn qrm pqr bdc +jvc: gxm xgh xkx gkt +kfn: vcm +msm: hzc pkd jks dld +thc: rqb +tgs: hbb zzb zlm +plm: mzv hgh glm zqr ctl +jvm: csr xsz +mjn: vtf hzq skv ltm +rsn: tct nvz +zqd: pqt +spl: ngt +lqm: vxq +kts: xvv gsm +hjq: dkm qmr rlp bmd bnv tkx ptj +dgg: rpl xcx +nkk: qsn pgq sts srn +thr: fhl xkb hnq kxx +vmx: fzm tfb tkq xls xnl +gzm: xrx ltl rnt kkk +mjb: jsr +fjq: fqh xgd +xmx: sgr +tzk: qsk nbq kpl +qnt: xjq rdv zjf lld +hqd: bcd +gpz: tbc +gck: qdc +qzj: pnf xch mlk +ggz: ttq +gbj: qzj bjd vcq rfz +nxm: stz dbv lbc +xls: mjt xcf xjs +tnm: sgj +zdj: fkg qtm ttq +pjm: fqx hcb bgv qsk +gjb: jvl nrx msj bts +qnq: xjf +ltx: mfl gvx +bhk: tqn scn qtm +mht: kfk +lxf: pbp +tnt: pln qzm zlb vrr lnd +dml: mmr flc kch lnd +xjd: nxm +rpf: fvv kpq jlk +hlh: lls zqd gsc lsh +cvj: nbq hrn +cjz: gpl gdj +npg: fhr rqb +xzm: mfd vvh pqt bck +cmg: lnd mpv lfb +ptj: fkk zgz +htl: bnv rzj shq +kpn: kzs jgc chn sgq zmb +gmm: zdg qdh tqn lzq vfg bzr +pgr: dgg hgn tbc tgr +jqf: ssd zqd khp mjl khx fpl +zxg: rvq pkv dkq +mhk: cnr kjj klc tkz +xql: hsh lxb +ttb: shm +zgr: mlk plm lxz +hrm: rrz rfl +dlb: ktj mpv dcp psc +tth: xrq dbg +lgk: gpz sqz rrz kmb zrp +njp: vks +fzn: ddl kdc xgs gjj ldm +hrc: dgd gpl ftg +msq: bfd qdc +ssr: pmv hsn khz dnp +frx: dgf dxv nzn nlh +jkt: ffp bdz xrd +qvz: rhx qhs zdg +bts: cqs jpm lbc drp +vzd: rms vdh pqx tnm +btx: gpc fcs +pmv: bnz +khk: jdc vkm mlp zzc fgh +qmg: xqn hsr fjs xhj +xlc: bkg nql ldf +tmf: jcg flc pbx skc +zcf: xhr zsv +kds: qfv gdf sbx qsm +pft: jnp vkm kbj gps +tqp: khb fbp +kzm: qcp hbb zqd +vdt: pnf vtx +vqk: ntv xbd rcq bqz ngd blr hzd +stm: qxc snc crk khz +xbn: mqz zsv +ddt: hxp tdp hzj +ttv: fsp nll bck ctl +frl: xzf shm +gkj: dgh fff +ntf: vtf sks rmf fxx pln +fvc: glt pfp cfv jvm +vxp: rjh rpf jjj +kcn: zcf +bsc: tkz gpz tkq +glj: vbf +dld: vjp dcl +kld: xrn jlk fqx +dxm: fjr dtj +rxh: mss rbx +srb: blm lrn fhr xzf +lfb: rts nth +kfx: zth hjc +lld: czk nvc lhn +kxr: dhq fgc nnm jsb cnz +zlb: kzd xrx pbp +flc: vmn +vbj: fmr fgp fvm rms +bps: qfh bqg llt qlb +xlv: lbl lkc pvj mzj drn +znk: fcp dbj +fbp: csn qqt +hpj: zdx kgj lbh xmt +dcl: vdh +qcn: hcb mqg +gpv: nrj xkc +qsn: hgq jcl sbx shk +vhc: mcn pln ssb vjp +dtj: bjf +xnl: qnq +pjv: ngx dhl trq +qmr: dbg +lsm: hnh rhh zcr xhj tqc +vmv: kbj brr +pbq: sln xkk frl +mhn: nmf jrb fzm +vxg: fnq rdv fzm +tfb: vkq dcx tqn +ghk: cdk pkd fbc hkk +lrv: vxd +psc: ssh rjl +clc: lhj cgc ltb zhb +jjb: jgc bqz qrl mvt zgd +rxl: xxp +jjj: nlq zcm cjl +rbg: rbx gjh +qrk: rmm lfj bqx +hgd: zxc xgc pqt bfg +gxx: kcp +gzp: tbl tqj +djf: jrt vxq fgc xsz +jfk: ffg bxb nnq rzj gck blr +vqc: qpx bxn +pvc: ttq lth +vcv: vxg nrh mkq mgf +lls: jcm zzb +xxs: mqz +rdl: kqs vvh thk rhh fvm gsj +fqk: ftg brr dvr +vtf: lrd xqn +czr: vrr gvx +nvv: nnq dkq nmq +qpb: rfz lhr bnz mll +qqt: thj +fgx: hhp hgn bnx tpj +pnf: fmb +pkt: jqq sst xkx +fnl: cdn ddd dmv nnx +nvj: jpg +bqp: lhr +pcf: skv rzd fgs fmp +zgp: fqb +htp: fzv +msj: lnx vjr +flp: vbj chf bck nll +zcr: rvp +dlm: mqn mvt kkr fvf +ksc: rqp nnm nlq rvh +pnh: xvr rjl mqf xxq +pqr: mmr rms hqn +nmq: xjf +szn: fdx lcx mqf +rqp: zhk +hqb: dck lnk pdz thk +dql: sbz fbc djf jfg +fkh: njp nsh +djt: grm +brr: jcr +qrm: glh xtj +cnk: gbz njs trn fkh +rhh: qnv +frt: lqf kfn jfg qjb rvp +qgm: bgm xmx qqg +kxc: gxg hlg vfv qnv +lkb: ltm rfz czr +ndq: hqh fns gpz jnz +vxt: dbh mft rrs xdv rgr +zzr: dkj lhr jrs bkf +kgx: jpg bvk +kch: nnm jcm +xcp: kvr btz fkh srf +qps: gss lqf +dzj: nrx ttb +dks: nvl +qcp: bjd +bvn: qdc +ddd: tgs djt +vdb: tzp cjz bcd +rlh: nrh tzq +lqq: xkb kmf +lfk: fxk qnn +jxk: kkc bxl vnv ddr +mkz: dkp +hfl: gtj vvq cjl +dnl: crc qct kjg pmc +xzc: gps frl +lpt: jhq pvj +bng: vnk qlb +fqs: xch xxp fnb +csz: fvg pbx rlf mml +lgg: lfk vcm ddt ltx +fkg: rbg vkm +mzz: xbd trj phn +shq: ffs nrj gjf prd +vpl: tbl +klh: mnt hnh tsc kfs vnf snc +qzm: vfl fxk +xrx: rmf dcl +jxd: lcf +bgv: fvg bxn +qqg: kcn ntg dkp gxz +rvc: trg hdt zgh +qll: lnd bvh vxp flm grb +dpc: jtc xsc +xsv: jnz +xhs: vdr bdc qrm vlf +gzh: ckr rhx zzc nkn +qzd: sqz +lxg: zth +dvg: tfr cqs +fzh: cqc +trj: jnp +jrs: ctg xrn xrd +fmz: pmv +trp: tdp flv xvr +nbd: ctf sjl +zfz: gdj lxg +mfn: pmt qmr +fhg: blm +sbq: xrt dpt gdx +sgr: fbt +xgs: xkb +kkk: tnm +zhn: bkf +lfr: bds fkt +lnl: dbg +phk: kxz flm gsr rxb +mtg: xgv hjq ptj zzf gpv +tqz: hzq knm gvx +rrp: rmf rnt +zzt: ddn ldf xgs +btz: lnl rlh +prc: jdg bvh bqp zkp dcf +rmm: nnk +kbb: xvv skt nnd +kns: nmq str njg pgh +fzc: rhk jzr rrb +jtk: mlc grh fsp rfv +rrz: ckh zqg +mgk: fck +hkl: lzg bnn vkd +fjs: khx fkx +jnp: lrn +csf: hqh njs lbl +gpl: tbl +lzq: cdb dtb hzd bmd +xcc: mgf +lph: fcj mnt ngx +bjf: pgl tkz +qvk: fhg rjx jqq dqr +cqf: zqg +sxf: ngs ctg fkt zhn sks vct +kmf: xkc +tkq: vkm +bfn: mzj +lpl: pbx jzc nlh tzz gkj +gkx: qkc gvq cqj cbd +gpn: sbx dmv blq dch +fnv: dqm qbn jvx +shk: sgp +fft: xpf drq +gdf: fbc vxq jtc +hzd: gkb gdj +fbz: kkk zrf hkz ffp nfr dcf fnn +btj: trq xqn mfd lbj gsm +fzv: rqp sqn +qfj: rvs vks +chl: zrp dpt tbr cdb +vdr: kcp +tnq: qct trn cmd zht +sbf: tzp spl bch nrq +phl: mtc bcb xbn +hjc: xtn mjv nrx +vnv: khp xcr +vbr: psh mvz xxp +hxn: nld kfv rdr +hsn: qjb mkz vfv +ckt: ksc vvq bkf vtb pzd zlb +pmz: jtf kcf ldx tgr +fpl: bcl ltm +hgn: xcc bjg fbp +zzv: tct qtm vks +qxv: skj kpg xjs qfp +tts: nvz sjh tkv xrq +tlp: vng snh vlf +vms: hnh hlg rvp nth +plj: znk gpc +fgb: jzr rhk +hhj: dlj +zcm: vxl fkb xrd +qgg: fcp xtc sfc jfz +lvb: nvl fft +ntv: pmc +sgj: fxk +dtb: ngb rvq nrx +dpt: xtl +qbm: cbm fvm tsc cvj +gqd: hqd psl