aboutsummaryrefslogtreecommitdiff
path: root/Puzzle7.hs
blob: 8f90e881311484d2d9fdb642beabd4f63e5d13f2 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
-- Author: Yuchen Pei (me@ypei.me)
import Data.Set (toList, (\\), fromList)
import Data.List.Split (splitOn, splitOneOf)
import Data.Map (Map)
import qualified Data.Map as Map
import Data.Maybe (fromJust)

parseInput :: [Char] -> [[Char]]
parseInput xs = filter (elem '>') (splitOn "\n" xs)

-- remove the symbols
-- f ["abcd (66) -> efg"] == [["abcd", "efg"]]
f :: [[Char]] -> [[[Char]]]
f xs = filter (not . null) <$> splitOneOf (['0' .. '9'] ++ ",()-> ") <$> xs

g :: [[[Char]]] -> ([[Char]], [[Char]])
g xs = (head <$> xs, mconcat (tail <$> xs))

solve1FromPair :: ([[Char]], [[Char]]) -> [Char]
solve1FromPair (xs, ys) = head $ toList $ (fromList xs) \\ (fromList ys)

solve1 :: [Char] -> [Char]
solve1 = solve1FromPair . g . f . parseInput

parseLine :: [Char] -> ([Char], (Int, [[Char]]))
parseLine xs = (node, (read weight, children))
  where node:weight:children = filter (not . null) $ splitOneOf ",()-> " xs

parseInput' :: [Char] -> Map [Char] (Int, [[Char]])
parseInput' = Map.fromList . (fmap parseLine) . (splitOn "\n")

getWeights :: Map [Char] (Int, [[Char]]) -> [Char] -> Map [Char] Int
getWeights tree node = 
  if null children
     then Map.singleton node weight
     else Map.insert node (weight + (sum $ lookups children childrenWeights)) childrenWeights
     where (weight, children) = fromJust $ Map.lookup node tree 
           childrenWeights = Map.unions $ getWeights tree <$> children

findAnomaly :: Map [Char] (Int, [[Char]]) -> Map [Char] Int -> [Char] -> [Char]
findAnomaly tree weights node
  | null children = node
  | maximum cWeights == minimum cWeights = node
  | otherwise = findAnomaly tree weights $ badChild childrenWithWeights
    where children = snd $ fromJust $ Map.lookup node tree
          cWeights = lookups children weights
          childrenWithWeights = zipWith (,) children cWeights
          
lookups :: [[Char]] -> Map [Char] a -> [a]
lookups xs ys = (\x -> fromJust $ Map.lookup x ys) <$> xs

badChild :: [([Char], Int)] -> [Char]
badChild (x:y:z:xs) =
  if (snd x) /= (snd y)
     then if (snd y) == (snd z)
             then fst x
             else fst y
     else fst $ head $ filter ((/= snd x) . snd) (z:xs)

weightDiff :: [Int] -> Int
weightDiff (x:y:z:xs) =
  if x /= y
     then if y == z
             then z - x
             else z - y
     else head (filter (/= x) (z:xs)) - x

solve2 :: [Char] -> Int
solve2 xs = 
  wd + (fst $ fromJust $ Map.lookup node tree)
    where tree = parseInput' xs
          root = solve1 xs
          rootChildren = snd $ fromJust $ Map.lookup root tree
          weights = getWeights tree root
          wd = weightDiff $ lookups rootChildren weights
          node = findAnomaly tree weights root


input0 = "pbga (66)\nxhth (57)\nebii (61)\nhavc (66)\nktlj (57)\nfwft (72) -> ktlj, cntj, xhth\nqoyq (66)\npadx (45) -> pbga, havc, qoyq\ntknk (41) -> ugml, padx, fwft\njptl (61)\nugml (68) -> gyxo, ebii, jptl\ngyxo (61)\ncntj (57)"


input = "mqdjo (83)\njzgxy (15) -> usdayz, zvbru\naltep (75)\ngaieus (117) -> unkring, wjgvjlg\nejlbps (59)\nuralh (17)\ntzdmi (891) -> mhzwwo, mgybhs, pptdd\nwhntvd (2133) -> vuzxyz, hcfgnt, kuvek\naoqjxqk (99) -> qjfdh, vmusp, yqmclp\nwwmjf (404) -> vvoadnv, sgujp\nbtgbr (54)\nftkfi (27)\nvamssbi (194) -> picmfs, eutmjw\nrrmrv (23)\nvdavxhx (31)\nensgy (13)\nayngc (51)\nqcblt (87)\nwgqalow (6)\nfvypts (47)\nrioda (97)\nfbmhsy (58) -> lqggzbu, xwete, vdarulb, rkobinu, ztoyd, vozjzra\nctmlo (29)\nuezrt (28)\nxvuxc (39164) -> nieyygi, hmcjz, ceizm\nlvejxwu (71)\nenogs (87)\nlhdwm (58)\nyeoeyme (55)\niwqzx (74)\nxmnts (1113) -> rcmcf, dgihmb, xyhyumy\nxhlgx (105) -> pamyclw, rrmrv, ulseuu, ihkrezl\nmivzz (10)\nkqwlhff (72)\nlrlfs (152) -> jlgvr, sttwla\ntrzae (35)\njqgfz (63)\nymmpp (66)\nvwuif (26) -> lrdpo, hxejeo, jxlzfjd\nosxdc (172) -> qlxtmmw, gzvxqn, krboup\nelfkuam (92)\nsjsfqhv (143) -> rwxwe, dyjyjd, nwbcxj\nkuvek (92) -> yqnfpeq, fcwev\ngcsftd (765) -> lmpvxf, epqbl, rlsom\njfpbi (28) -> altep, ajsgpnx, vygscor\nwoqtzz (51)\nmrqbmg (15)\niwdkssd (78)\ngwqzfk (28)\nzfvweqs (34)\nanqvh (2135) -> gprcxh, oyahwdc, hxtrzk\neeikp (24)\nnrlmfax (148) -> ammwyf, uaypo\neutmjw (12)\ngsjah (31)\nlgofh (90) -> alhvq, fgreoy, lmgwjss\nuntdlz (88)\nrtdpm (24384) -> xhvyt, mrqug, kbkcw, gmlxpn\nyfejqb (493) -> osxdc, jmyovo, nfmkvob\ntzccgz (74)\ncqksxxm (56)\nvclagjf (40) -> tcziis, oxkbg\nmqhuedy (7)\nvvfukul (88)\nacmkv (65)\ngvfmsy (259) -> tokzfq, mnenfrc, feyacx, vpjiwwm\nzcxiup (35)\ndtivzu (36)\nrwpaht (55)\nyzuuvbm (63)\nxuavduh (125) -> ftcxb, vynaaf\nxmxuqtu (13) -> edwlp, xphhbib\ngrqiik (165) -> ookot, hazds\nlnvdcr (31)\nqdxkysa (155) -> nqcdwx, boliuot, dsjxy, mfjan\npdbruf (76) -> wwpagi, svmgylv\nxilwqcz (106) -> gsjah, wntacd, ifvwm\nabdnunu (35)\nkihew (46)\njteda (97)\nhzdox (43) -> oclbecq, iwdkssd\nzdtzt (77)\narlra (258)\nomynf (318) -> dwdjp, kiqfls, sfepx\nxycww (64)\nvlsmybk (83)\numhfxkg (40) -> cpfswhf, jpgbqgr, guzav, xumyvt, gmgwaa\nngdhmz (92) -> qgdeiw, dhcgig\nmxgpbvf (52) -> jkaah, tfovn, foaqmc, gaieus, zxgptth\ndiizvrq (69)\ndnuov (72)\ncjofkgw (10)\ndtacyn (42) -> xvuxc, eyyrn, udtsgjk, zprkrrn, rhhdc, rtdpm\ngrdpxxr (45)\nbruwizl (11)\neetpan (48) -> mbffn, hhmwxe\nceupnk (31)\ntuijc (27)\ndhoqdtf (81) -> fzvnyc, ofazxj, vudnna\nsvmgylv (88)\nbxoqjhj (70) -> woqtzz, ayngc\nmpthchj (1933) -> acowb, ojaql, tqlyzrj\nuovufgc (91) -> sumnuv, iklpkqe\nreslc (26) -> epnsvw, zgpuqmv\nsovwn (63)\nmhgzyqt (30)\nrfhlu (186) -> ifpae, bivky\nyimjq (285) -> vvvgmqe, rjqdo, uavna\nmgybhs (300) -> sgwxlb, beopgpz, ftkfi, tqndz\nyareka (95)\nqyiwwwy (39)\nvudnna (93)\nrbeigk (47)\nqzhrv (360)\nimgrm (12512) -> gcsftd, odxjz, umhfxkg, oqisjkn\nnieyygi (7308) -> ptshtrn, mxgpbvf, cfqdsb, yfejqb\npytprd (75)\nykaodk (24)\nupbwakj (66)\nbyxzbw (86)\nxlzryhc (1814) -> ujxume, zrqzw, aqwfxoj, mxtgoh\novonpn (93)\npfzsu (84)\ntwucd (7)\nvtrgext (50)\nvpjsxth (70) -> kobwl, eeupi\nnwdzcl (54)\nxwyxvr (29) -> pffhee, ycmdmvr, cupvdjn\nmktppi (86)\noouozuv (46)\nzhuue (5)\nkpoou (34)\nblskny (29)\ngrhibzl (43)\nokwiabh (304) -> hyufw, hmhmfd, mwhef, lnkeeie\nnlpdso (8)\nvyqni (76)\nmbffn (85)\ntsuti (34)\nplgldf (90)\nobelp (105) -> icdtprw, mrqbmg, wwmzjie, qxhuuf\nuueqz (52)\nmumpgs (94)\nioxkn (67) -> mxqme, tcugzqe, wbopu, ipjaf\nfyecx (50) -> gcyzqup, zkljjip\ngmfzmby (90)\nsxbko (84)\nunkring (48)\nkbdrjwl (2012) -> skjdw, ukqofsd, gonru\nguzav (73) -> tuzwlaj, hsdwgl\nqicxip (18)\narbiru (168) -> znbxm, zsetpb\nrjqdo (36)\nslvwki (11)\nuanii (10)\nzxvtq (1702) -> brenhzl, aekrgip, eojaq\nizmnzef (330) -> idwncn, tcsoa, wagjjy\ngcyzqup (63)\npjqtv (29) -> qvmdj, ovzrat, hjtmfck, yqkzm\nawzbq (25) -> qjhugv, grqiik, ojcbjkx, blwgxoz, yspyrs, qiwio\nbadle (30) -> anuyfh, fcesi\nltxiy (341) -> smusd, kpoou\nmwzana (12)\nelkqdsi (52)\nggymz (83)\nhxtrzk (172)\nlufwlhx (34) -> mhrno, mtyuix, crzqw, mktppi\npvkps (92)\nlrgsjqn (66)\nfgtzv (63)\nmtrmn (79)\nyshpwl (19)\nxnmmdhk (49)\naozsepf (113) -> rnaud, bclda\nxhnlro (46)\ngvrwy (71) -> idhdqo, bvjds\nznbxm (12)\nuaypo (61)\nskoloe (28)\nypfxnr (233) -> avxapnw, maalkoh\nfywvj (71)\nltpjwb (82)\natbxzb (221) -> jepepf, torpy\noxhnlv (13) -> nrozgxx, kjjzdvp\neyyrn (44234) -> rchso, dqwet, qoqdhpx\njxvod (9)\njrvumy (92)\nukejvdd (34)\nulseuu (23)\nlmgwjss (34)\nvpgsx (65)\nykvww (51)\nzwmbuyl (71)\nvcsfjyd (24)\nvdxfff (38)\nvozjzra (70) -> ginyxrk, sgbejy\ncizxbj (193) -> abndmkw, qyiwwwy\nyroyqeo (13)\nhkanwp (13)\nplctc (345) -> rngety, zebcbo\nayode (38)\nrwwww (22)\nrundk (116) -> cwwsi, enogs\nixqqqjj (269) -> aozcb, ahvhqoe, qycnzr, ojwezo\njdjvp (54)\ntcsoa (165) -> rwpaht, idcowch\nowlwzwx (36)\nyhljr (26)\nrciod (54)\ntnhnp (154)\nshmvzp (43)\ngkoze (158) -> lrpzf, zkbzbn\npicmfs (12)\nghjcbf (3487) -> ccpeyc, okwiabh, qxsie\ntcziis (77)\nraugvuk (78)\njepix (56)\nwlbuyk (73)\nfgreoy (34)\nidqsz (27)\nakcgcxy (90)\nhkcobh (20)\nhgmzkam (63)\nteauca (399) -> cwlvxo, jsohd\ndkjcz (34)\nxulggnd (253) -> spfyg, qqpvjbu\ngyuiagl (126) -> xwkudo, irlntnq\nwnkaz (9) -> ovonpn, idnken\nmlqfisf (150) -> lrgsjqn, rfewc\nikknx (23)\naekrgip (155) -> xbtcnx, odfgjh\nqfvbg (420) -> jdyblpx, llqfm, vydlsvt, gkoze, ofvidy\nxddngkv (75)\nhazds (17)\nawvyj (43)\nswsbeo (1351) -> crhrx, ylbuzsq, wcuqhwq\nirlntnq (23)\nasdevc (66)\ndniwy (7)\nqedlf (60)\nyrsfcq (72) -> emdaoqf, qezss, frozh, aakyzvs\nptocen (64)\nvqxyr (66) -> jdjvp, rciod, zwofqok, igkxvqh\nkjgfm (73)\nhmhmfd (100) -> hbuwd, rrohrwo\nlezpa (84)\ncfqdsb (556) -> feizivp, vjhsczt, gmxbjg\noclbecq (78)\nqqypffg (67)\nlrdpo (91)\nkvolhll (77)\nnhiujz (271)\nmxqme (32)\nwjmfbz (75)\nsgltbu (80) -> guphfh, uzxjy\nwvjumh (90)\ntlwfzzu (87)\nvmusp (83)\njlslmo (13)\nbhysq (10)\ndaxfuxl (13)\narqxnjl (1242) -> xvtdoyr, rkupoek, izapo\nmtyuix (86)\nqjuvyr (56)\npfctdp (127) -> hjibwmq, bseajmt\nerjsdm (65)\njkaah (97) -> blskny, ctmlo, sxlecxm, fjixq\nlldszk (2467) -> xxslxbt, elfkuam\nwzejrx (43)\nyqnfpeq (20)\nztoyd (227) -> cuwjy, rhamh, idwgpl\nocvjwr (63)\nbxgyjw (60)\nbnggqtn (58)\ncupvdjn (50)\nelebwva (173) -> skmum, hibcfm\ntmhgfe (223) -> tqfel, daxfuxl\nslduca (71)\nybcta (17)\ncyniz (855) -> cgzpd, kimrt, sxaib, syppxhj, pfctdp, qdxkysa\nledbvvq (240) -> cchmz, grdyhff\nalhvq (34)\neoxmesy (24)\nhzzwzx (7)\nodtzcu (37)\nrnviq (89) -> rkcdg, fyalh\nqvmdj (30)\nphqjxv (161) -> kihew, qiyidu\nifpae (87)\nooqsaz (97)\njnsph (93) -> aeiee, vcpkha, zvdmblb, sbvcz, yriybrc, aoqjxqk, nhlbui\nvvoadnv (23)\nbtabyp (203) -> gegad, rmyjxl\naosrim (40)\nqgkhdex (41)\nqvhpl (84)\nrkobinu (164) -> ymccua, xtsnf\nfcesi (73)\npxdezu (43)\nphjllc (132) -> slvwki, fhqqbsx\nezrpvp (94)\njhlxf (74)\nypfss (172) -> kltwy, grhibzl\njrqmxt (23)\nnfchsda (43)\nctnfhim (71)\ndksbpu (50)\nsxlecxm (29)\nexnlyy (26) -> nwooizm, jhlxf\nhyurmnj (70)\nrarvsbv (91)\npmpmgak (19)\npnkce (63)\nisozjve (84)\naxondt (154) -> nmqmbc, kmhzija\nyuzamn (79) -> rxwbam, ptocen\norlwcra (71)\nsxghqf (17) -> hswecad, pbdww\nsaksuh (72)\nhromhg (50)\nlqplgho (198) -> fywvj, jbxkrhf, slduca\npptdd (76) -> cthyoqb, mvjppl, mhtfkag, dsxamd\nbaosr (80) -> byxzbw, meajs\nqzslx (83) -> vtrgext, fnwzvf\nrhqmcl (15)\nnxvfovk (97)\nnwbcxj (68)\nyxstzne (21) -> dnuov, mqwmam\nwlheoem (6)\nluqtj (171) -> kjgfm, wlbuyk\nsgujp (23)\nodxjz (37) -> luqtj, igpyz, qzltox, ufwsbx\ngprcxh (84) -> xhlqyt, rwwww, xwsgv, gnqasz\niklpkqe (49)\nvmianfx (51)\nzkljjip (63)\noaucz (74)\nzaahfws (72) -> cpncdpn, kqwlhff, saksuh, rwnnzj\nomnflj (26)\nyzzkb (98) -> nxywzy, zukmsws\nupttsy (46) -> lhusw, cabbpbp\nawdam (122) -> zboinwm, erjsdm\nidnken (93)\nxpxwq (56) -> cizxbj, ynxwu, cpbfkf, izfny, dontia, viohwud, nhiujz\nadklqb (13290) -> pzsdbxi, jahpohn, yurlqf\nyurlqf (1176) -> wiyuhex, cujasg, hzdox\nqjagx (265)\nccpeyc (13) -> eowou, kbbck, oxhnlv, obelp, rxmnfgj, ahfsddo, yxstzne\namdyzs (28)\nnxywzy (96)\nvjunjns (170) -> dgrfnj, ceathvu, lspkp, nqmfyxs\njuzzs (30)\nhrfdy (79)\nklbkp (1736) -> qzslx, uycbfkf, gvrwy, eadxb, rysbl\nggijqt (21)\nebeltx (60)\nlnkeeie (58) -> hrfdy, mtrmn\npwsfhgi (52)\nzdymtqx (49)\nzenuyzk (84) -> teqabnc, kmqopjq\neowou (119) -> jrqmxt, ikknx\nmwdjsxv (51)\noritewf (164) -> jxvjp, htvenp, cgzcdzi, ukysk, ocakmk\nvygscor (75)\nzkvql (20)\nsttwla (65)\nmmlkoh (2271) -> jmrbakg, bpatyq, yucyi\nyiupwfc (88) -> izrwts, yimjq, vfqbff\nynxwu (127) -> ghicha, xohoejm\nfqffx (94)\nxhlqyt (22)\ntqndz (27)\ncrzqw (86)\nepqbl (140) -> zdxksj, zkvql\nujckr (1913) -> phjllc, ibuys, tnhnp, sgltbu\nlezek (775) -> rkgwky, menclt, ekxdgkq\nqzoqo (79)\nrnaud (68)\nzwfvctv (5)\nlyebndp (49)\nircvo (11)\ndpqnim (39) -> pxdezu, awvyj, yiigtz, wzejrx\npmtssy (18)\nzjyhf (56)\nkdzuk (78)\nmnojup (73) -> sxbko, umnvlw, zvodhi, pfzsu\nbefeb (96)\ntpcir (16) -> jcwdnlr, goeprx, wwskbob, tneetox\nxohoejm (72)\nqdufkz (94)\nghyii (60) -> esmmub, qjuvyr\nzprkrrn (46528) -> ghjcbf, jsrdr, ywyvxv, ujsqcr\nyxpavwg (38)\ndqwet (6621) -> uibut, bgugou, izmnzef\nzqhmft (98)\nrttcn (108) -> ylzoeee, ooqsaz\nqzjtxi (13)\nyssxm (1494) -> yuzamn, hybkngi, jzgxy, umryvx, mykoaba\nxbtvul (30)\nvgmnvqr (79)\nrchso (42) -> viwwie, kppigwv, zesja, azaxxvz\nnjxkbbs (37)\nsambp (84)\nctmyow (14952) -> lwzfwsb, awzbq, dvdbswf\nbjenf (94) -> bjxuox, offqpoc\nekhsurt (223) -> skoloe, ijzzl\nmhnjio (29) -> whntvd, ujckr, dysfcb, yssxm, cyniz, jnsph, mmlkoh\nuycbfkf (9) -> tlwfzzu, mnieqt\nrcmcf (86) -> jteda, iydwka\nzboinwm (65)\nboliuot (31)\nudcgj (455) -> ynydd, uxbgd, xogbbc\nuozayo (39)\nfltthw (117) -> hdpizox, dfqahip\ndgrfnj (22)\nwyusin (38)\nzvbru (96)\nowhgyez (37)\ndtwdad (81) -> zwxvo, nsldzh\nyqmclp (83)\nsemtwrh (82)\nihteano (97)\nmhrno (86)\nwwpagi (88)\nngcyru (56)\nngwldiu (55)\nvirmpl (175)\naakyzvs (367)\nvubuie (79)\nkpczbnm (26)\njahpohn (51) -> uawat, zenuyzk, pwonvpm, bborg, zjnaor, lniuonj, yxmkycd\njxlzfjd (91)\nmgvgcf (30)\nxphhbib (83)\nvzubyy (84)\nspfyg (13)\nemaqhkl (49)\nbvjds (56)\naqwfxoj (50) -> byytq, qybcrhn\nukysk (234) -> ircvo, oeinoe\nlpwze (175) -> ltaujs, hosjc\nwikrvq (15)\nanuyfh (73)\nfgfkrxp (69)\nrrtqw (8)\nlehgocg (42) -> vpgsx, pydanp, nppyzr, kdgxoi\nnzuvke (16)\nehcjup (18) -> kqduo, sambp, rxehio\njjqwgq (34)\njepepf (63)\noikfudn (135) -> ynubz, xqqdtu\nmaicx (48)\nammwyf (61)\nxqkrdp (30)\nylbuzsq (89)\nulrqcxx (17)\nbfhjnn (13)\nhyhcihf (28)\njqtbsy (32) -> yqzkn, dhiavwc\nshelxb (66)\njmfybp (100) -> qzhrv, ckyvnnj, dhoqdtf, hhrqizc\nfgscpqx (96)\nviohwud (256) -> zwfvctv, rjfktu, gfygwj\nerqjppo (97)\ngldbbde (24) -> hqxsfn, vwgmnj, rphmi\nhvrve (36)\najsgpnx (75)\noklhlne (12)\nradodhv (5)\nkycxdgx (29) -> wjfar, pmjvz\nmvjppl (83)\nbrilycx (97)\nduklm (47)\nhibcfm (87)\nyjeavx (53)\nvwgmnj (97)\nuavna (36)\ncujasg (65) -> qqypffg, pgpmlgz\nrqura (47)\nrfewc (66)\nayklc (595) -> lrwlhbc, ypfxnr, gldbbde\nnvldfqt (57)\nbzvwi (20)\nrcstlvu (10)\nfnwiq (63)\ntwikxu (59)\nbyytq (60)\nmmlcvqo (37)\nsqowhp (34)\nnwkqcsc (24)\nczlcjl (626) -> qmtofe, kefdbed, rnviq\npqavmdg (17)\nwfjme (21)\nlatbj (240) -> vdavxhx, lnvdcr\npthrzgd (38)\nghicha (72)\nvlrtfe (114) -> aosrim, pnlmj\nizrwts (337) -> amdyzs, epilojy\ncjksouo (154) -> oaucz, iwqzx, dlszm, tzccgz\nrysbl (21) -> dzmqhbp, rscwd\nqilfd (86)\nzebcbo (42)\natdfonp (52)\noukcyj (7)\npydanp (65)\nbpatyq (32) -> iszhqi, gwnxq\nbcuxejj (63)\nhdsvjwr (1480) -> stryo, jmtmw, tbdfmz\nywyvxv (3190) -> gydenqe, ydhxt, yiupwfc\nxqqdtu (20)\nxkqiqns (69)\nwcuqhwq (89)\npczqv (88)\nyhmbooy (35)\nbjxuox (39)\nkqduo (84)\nqinuxsr (238) -> ajcpmg, mdtuwks, huvag, bxtzi\nwjfar (85)\nnfmkvob (208)\nwlrrckg (697) -> pcxcr, lmyinxy, ekkgfax\nplifn (26)\ncrhrx (89)\nzwofqok (54)\nafurlcd (63)\ntohwd (1394) -> eeikp, wsqspc\nojcbjkx (185) -> mqhuedy, twucd\nwbopu (32)\nfjixq (29)\nmwhef (136) -> zcvqw, tnxhf\njdyblpx (130) -> mmhim, phomdt\nnhdfnv (51) -> fltthw, kycxdgx, xilwqcz, prbrv, dzibhav, orxuz, zozpw\nckyvnnj (234) -> pnkce, yzuuvbm\nvllgqt (5)\nkbrbq (42)\nstryo (219) -> idqsz, czala\nksrbxbh (255)\nvqrcq (127) -> zcxiup, vvmfk\norxuz (172) -> bfltqak, skogcpe, jxvod\njbxkrhf (71)\negxng (20)\nfswhfws (90) -> ocikhq, ayyfw, gwqzfk\ngegad (26)\nifvwm (31)\nkmqopjq (81)\nrdxfau (8)\nvvvgmqe (36)\nrssmrnc (53)\neofrs (35)\nvdarulb (246) -> hzzwzx, oukcyj\nrtbjlii (157) -> pcxny, zjzyo\nzjnaor (118) -> uuozpc, xycww\nzmkyj (65) -> fqffx, ikzsd, qdufkz\nbivky (87)\nroirllq (75)\nosehy (12)\nodqfu (37)\nrhhdc (3564) -> mhnjio, mzrntf, imgrm, sgamgp\nxghyc (35)\numeup (55)\npihhh (859) -> jfpbi, xvsrff, phqjxv\nyucyi (35) -> pqavmdg, ulrqcxx, eaemt\nkobwl (74)\nzudwpn (2104) -> gvfcl, dicxtfr, reslc\nacheq (179)\nhxxvca (41)\nsbvcz (198) -> mveyh, xddngkv\nrphmi (97)\nkotdcly (26)\nrwrmuv (78)\nskmum (87)\nrngety (42)\nlhusw (74)\nsrrbgff (42)\nfvpbw (23) -> vmianfx, ykvww, mwdjsxv\nhuvag (23)\ntokzfq (22)\njylrfoj (72)\ncpbfkf (77) -> brilycx, ihteano\nfzofpn (75)\nxogbbc (32) -> asdevc, shelxb, rurnike, ymmpp\najihys (56) -> bnggqtn, lhdwm\nrhamh (11)\nxvsrff (205) -> eoxmesy, nwkqcsc\nhbuwd (58)\nxjjhicj (28)\niszhqi (27)\nqqpvjbu (13)\nlmyinxy (287) -> bhysq, rcstlvu\nubdju (438) -> wgqalow, xoknnac\nkmhzija (88)\nlwzcyq (42)\nomwhgx (79)\nfvqgb (71)\nufsus (26)\nvynaaf (21)\nwwdhply (52) -> lldszk, klbkp, vysbz, xgtged, kbdrjwl, hcxrwwv, anqvh\nsgamgp (14279) -> czlcjl, wlruzq, koklf\nnfiyxwf (46)\nsmusd (34)\ncuuvm (195)\nkrboup (12)\nvysbz (1571) -> jzxcnkv, rfhlu, zaahfws\nrojomwr (32)\nscrykpr (47) -> dlochnp, kuxdz\nzesja (57) -> ltxiy, ngskki, emjhgx, mnojup, ixqqqjj, wnpyrz\nskogcpe (9)\nbrenhzl (119) -> bzvwi, lcvtfz, egxng, hkcobh\nrkgwky (75) -> grdpxxr, xflynr, yrixhb, lalemvr\nodfgjh (22)\nwlruzq (1135) -> rrtqw, jmcafz\ntorpy (63)\nyqzkn (93)\nhcfgnt (132)\ntvobw (69)\nyxmkycd (120) -> afurlcd, qyerfcc\nikzsd (94)\nludhiab (96)\nxiayty (80)\njsohd (15)\ntqfel (13)\nhuvrn (86)\nwzlrws (26)\nywxjbc (39)\ndwdjp (31)\nhpfhhg (63)\nhybkngi (195) -> wlheoem, oxbfji\nwsqspc (24)\neaemt (17)\nlkwhxen (85)\nwmzmy (59)\nyspyrs (147) -> kpczbnm, yhljr\nfuwat (65)\nalsay (7) -> snloung, djdmsc, sdqll\nzxgptth (189) -> fknto, dpfuu\nkaihsu (228) -> ggijqt, wfjme\nkbkcw (6055) -> swsbeo, pihhh, wlrrckg, fbmhsy\nrnatyw (59)\nxhvyt (57) -> xlzryhc, zudwpn, swsva, mpthchj, wxtlbn\nywrnqrp (179)\nfzvnyc (93)\ntantkl (77)\nxvtdoyr (45) -> tatvgv, nrvpgth, luugrb, maicx\ncpzdjum (55)\nblwgxoz (87) -> mzeqa, abghrf\nuxbgd (184) -> zbnynh, twrim\ndnmrtok (221) -> epzukel, fgtzv\ntnxhf (40)\ndgihmb (175) -> liglllj, xghyc, eofrs\njmrbakg (86)\nrurnike (66)\nceizm (58) -> ebqjlp, xpxwq, vfigul, arqxnjl, xmnts, sdbkh\ncmmnbug (77)\nsgwxlb (27)\nlmbucr (55)\ndsxamd (83)\nqcgykv (88)\nwxtlbn (604) -> lmipr, pxwsb, lufwlhx, mixmiv, ledbvvq\nqbwfy (19)\nomznvh (320) -> zmemxd, ihjpab\nxoldlj (139) -> umeup, ewvfvx\nzdxksj (20)\nfoaqmc (71) -> ctnfhim, zwmbuyl\nazaxxvz (1383) -> lrlfs, gqvnw, vqxyr, mlqfisf\nhcdyhi (63)\nhosjc (52)\nsfepx (31)\ngzvxqn (12)\nmaalkoh (41)\nqwnexz (8)\nguphfh (37)\nuuozpc (64)\nnrvpgth (48)\naljvja (98) -> arbiru, iumni, lgofh, nkhdzon, yxpkynj, qqqsv, qiduej\npctyehs (304) -> ensgy, bfhjnn\nxkzwk (17413) -> tdbcau, rtbjlii, vwuif, hfyaud\nizfny (148) -> qgkhdex, qhrmshn, sewsk\ndhiavwc (93)\nwnpyrz (323) -> shmvzp, nfchsda\ncdaue (59) -> odqfu, knqruz\nsyppxhj (264) -> vllgqt, radodhv, zhuue\nyfozx (55)\nrrohrwo (58)\ncwlvxo (15)\nhhukemh (155) -> osehy, lfsqjx\nluugrb (48)\nojoes (39)\nzjzyo (71)\nngskki (409)\nrjfktu (5)\nhcxrwwv (2126) -> sxghqf, oikfudn, virmpl\numryvx (96) -> owhgyez, jkorfu, odtzcu\nzvdmblb (222) -> hpfhhg, bcuxejj\nswspgk (55)\ndontia (127) -> ofcfw, zjstwhc\nqlxtmmw (12)\nceathvu (22)\nllqfm (64) -> omvsg, xiayty\nekxdgkq (83) -> qilfd, huvrn\ngwnxq (27)\nmveyh (75)\neadxb (167) -> mnqis, fglxnn\nbexvpzn (55)\nywquvbe (17)\nzvodhi (84)\naleenbl (55)\nquqts (63)\nkimrt (30) -> qdtel, zznqt, mqdjo\neojaq (73) -> hcdyhi, jqgfz\nblhxnrj (55)\nrvycq (47)\nycmdmvr (50)\nbfltqak (9)\nydhxt (275) -> hqekpst, jpwof, dbuno, jfavd\naeiee (348)\njmcafz (8)\nlfsqjx (12)\nepzukel (63)\njsqss (19)\nqgdeiw (83)\nhfyaud (299)\nybtmtno (26)\nridid (16)\nuslizt (59) -> xbtvul, mhgzyqt, mgvgcf\nvsnpvm (87)\nojaql (157) -> ppudoq, ftsejjt, cjofkgw\nwyjbjf (8)\nwntacd (31)\nymccua (48)\ncgzpd (201) -> vndxvi, uozayo\niumni (192)\nofazxj (93)\nuoblmgo (46)\ncftahaw (70)\nrlsom (66) -> nvldfqt, mdakca\njlgvr (65)\nozbig (98)\nqpbebnc (76)\nayyfw (28)\ntkqlt (107) -> pmecds, dtivzu\ndnlftxp (81)\nmqwmam (72)\noxkbg (77)\nnbycb (55)\nedwlp (83)\nnkhdzon (34) -> hjrhs, qzoqo\nekkgfax (70) -> ugxovve, vgmnvqr, wafanbg\nhjrhs (79)\nzwxvo (58)\noyahwdc (16) -> rwrmuv, lyuznk\nuaatgf (11) -> uueqz, atdfonp, elkqdsi\ndyjyjd (68)\nrxehio (84)\njzxcnkv (202) -> vubuie, omwhgx\nhxejeo (91)\nzozpw (199)\nptshtrn (526) -> uslizt, pjqtv, bzbdorp, atvkttc\nqzltox (97) -> lmbucr, blhxnrj, cpzdjum, swspgk\nvywneg (53)\ncigzzld (90)\nwxqadgl (88)\ngoeprx (59)\nnhcio (88)\njsrdr (2962) -> rezncs, udcgj, cjtrpm\nlswgx (75)\nczala (27)\njwftyhn (76)\npgpmlgz (67)\nabqar (319) -> ooque, nyimka\ncuwjy (11)\nkltwy (43)\nfknto (12)\nzvgxbve (37) -> zqhmft, mwfno, mnyblkw, ozbig\nxwete (92) -> lezpa, qvhpl\nqdhte (168) -> ypysb, nwdzcl, btgbr\nnkrsre (18)\nhqekpst (68) -> eqakw, gmfzmby\nnppyzr (65)\nojmudkf (68) -> rhqmcl, wmlvvzy\nycpgrap (52)\nfnwzvf (50)\ntfovn (213)\nkefdbed (121) -> tuijc, tngvv\nidwgpl (11)\nqybcrhn (60)\nzvfdl (72)\nrwxwe (68)\ntcugzqe (32)\nliglllj (35)\nzkbzbn (33)\nmbsuxms (28)\nugxovve (79)\nudtsgjk (56) -> adklqb, xkzwk, wwdhply, ctmyow\njlvflv (47)\najcpmg (23)\nhmcjz (11191) -> ioxkn, wnkaz, cuuvm\nzjstwhc (72)\nqxhuuf (15)\nunoqw (34)\nxmzvsd (55)\nrwnnzj (72)\nxyhyumy (104) -> vhdyc, vvfukul\nginyxrk (95)\ncgzcdzi (70) -> uoagriu, jnfcc\noxbfji (6)\nyybuekt (96)\nzznqt (83)\nyiflicd (97)\nhhmwxe (85)\navxapnw (41)\nnrozgxx (76)\nprbrv (61) -> nfiyxwf, vlhtnof, xhnlro\nxwsgv (22)\njmtmw (205) -> sqowhp, qjkqxp\nepilojy (28)\nqjkqxp (34)\ncchmz (69)\nkkfcate (114) -> juzzs, xqkrdp\nihkrezl (23)\njkdrr (7)\nmqhelgf (31)\nfyalh (43)\nicdtprw (15)\nqfuxpos (94) -> omnflj, ybtmtno, cowhe\nvndxvi (39)\nsbaswic (34)\nrbbkcz (81)\naozcb (35)\ntdbcau (109) -> zhfenxn, yareka\njpgbqgr (61) -> fgscpqx, ludhiab\nftcxb (21)\negrtqo (60) -> tigky, mbqfitx, lqplgho, ivkymv, omynf\nmnyblkw (98)\nipjaf (32)\nmfweuw (96)\nkjrup (11)\nusdayz (96)\nvbfwgo (85)\nlwzfwsb (820) -> alsay, sgzxb, cdaue\ndzibhav (199)\nbxtzi (23)\nihjpab (65)\nxtsnf (48)\nofvidy (8) -> zvfdl, zhezjdt, jylrfoj\noehapu (54)\nlooasd (161) -> ycpgrap, pwsfhgi\nmrqug (6751) -> oritewf, nhdfnv, pblscqj, rmknzz\nrmknzz (649) -> looasd, qjagx, hkati\nykidq (61)\ndlochnp (60)\nfglxnn (8)\nooque (55)\nmnqis (8)\nlspkp (22)\ndgpydnw (15)\nrezncs (776) -> gjzwa, uovufgc, hdhlyxq\nsumnuv (49)\nzgpuqmv (52)\nwagjjy (91) -> pvkps, jrvumy\nwmlvvzy (15)\npnwrdla (91)\ncthyoqb (83)\npwonvpm (162) -> srrbgff, kbrbq\nsmvkv (59)\natvkttc (41) -> msxbv, oehapu\nioaogd (46) -> wzlrws, ufsus\nlmpvxf (78) -> ukejvdd, sbaswic, jcbdf\nvfigul (1371) -> vlrtfe, upttsy, vclagjf\noeinoe (11)\nuoagriu (93)\nrkcdg (43)\nqycnzr (35)\nvhupxjs (157) -> pmtssy, nkrsre, qicxip\nmsxbv (54)\noifkd (69)\nqjhugv (199)\nnsfrscb (278) -> oklhlne, mwzana\npmjvz (85)\nqmtofe (19) -> kdzuk, raugvuk\nfhqqbsx (11)\nzukmsws (96)\nkuxdz (60)\nofcfw (72)\nteewbxk (39)\nhsdwgl (90)\noffqpoc (39)\nakvdjmc (75)\npcxcr (214) -> eqdud, mqhelgf, ceupnk\nzhfenxn (95)\neudjgoy (351) -> bnomgct, ojoes\nwjgvjlg (48)\nbborg (10) -> tarxkki, ejlbps, smvkv, wmzmy\nxoknnac (6)\nbzbdorp (73) -> pthrzgd, vulklzo\nqczjylz (19)\ncpncdpn (72)\nkjjzdvp (76)\ndzmqhbp (81)\nxbtcnx (22)\nfcwev (20)\nvlhtnof (46)\neqdud (31)\nukqofsd (139) -> njxkbbs, mmlcvqo\nxxslxbt (92)\njkorfu (37)\nnhlbui (348)\npkgri (41)\nfsowc (88)\nidhdqo (56)\nuqmgy (1245) -> ysnvnu, rundk, yzzkb\nhqgsj (69)\nyrixhb (45)\nyqkzm (30)\nwdeclb (13)\nrxmnfgj (27) -> hqgsj, diizvrq\nuawat (230) -> rdxfau, qwnexz\nrnzglhk (69)\npsldjp (66)\nyedhncv (16)\nsxaib (279)\ngfquwm (13)\njmzwqs (49)\ndpfuu (12)\nedgsqu (32)\nacowb (33) -> cmmnbug, tantkl\nfbtqea (49) -> ubdju, omznvh, cjksouo, wwmjf, fdbehfx\nxllppou (61)\nzqrfz (29)\nmdakca (57)\nabndmkw (39)\nejtuc (42)\nmmhim (47)\ndicxtfr (110) -> uanii, xiiamxd\ngmlxpn (6182) -> tzdmi, egrtqo, uqmgy\nsgzxb (119) -> dniwy, jkdrr\ntuzwlaj (90)\ngmxbjg (187)\nnwooizm (74)\novzrat (30)\nmwfno (98)\nmbqfitx (249) -> rbbkcz, dnlftxp\nftsejjt (10)\nbeopgpz (27)\noqisjkn (672) -> kktfosp, vhupxjs, dpqnim\nskjdw (165) -> ridid, yedhncv, nzuvke\njfavd (72) -> nhcio, qcgykv\ngydenqe (739) -> fvpbw, badle, fyecx\nmhtfkag (83)\ntneetox (59)\nhkati (58) -> tvobw, xkqiqns, oifkd\nqxsie (136) -> bjenf, bxoqjhj, ajihys, ghyii, qfuxpos, gyuiagl\nynydd (220) -> hypma, qbwfy, jsqss, yshpwl\nesmmub (56)\nypysb (54)\nfeizivp (40) -> jmzwqs, zdymtqx, emaqhkl\nlalemvr (45)\nmxtgoh (132) -> pmpmgak, qczjylz\nujxume (88) -> pkgri, hxxvca\nylzoeee (97)\nzhezjdt (72)\nojwezo (35)\ncjtrpm (90) -> xmxuqtu, acheq, tkqlt, xwyxvr, hhukemh, eqyac, ywrnqrp\nsewsk (41)\nlqggzbu (164) -> rojomwr, edgsqu, ifrxho\nppudoq (10)\nvydlsvt (176) -> vcsfjyd, ykaodk\nuswkbi (13)\ncpfswhf (223) -> dgpydnw, wxexs\nfeyacx (22)\nmenclt (255)\nigkxvqh (54)\ncabbpbp (74)\nidwncn (157) -> rnatyw, twikxu\niuwokd (89) -> vlsmybk, ggymz\nqiduej (90) -> jjqwgq, tsuti, unoqw\nimuik (434) -> awdam, baosr, tpcir, pdbruf\njijdq (202) -> dkjcz, zfvweqs\nsgbejy (95)\nrxwbam (64)\nmzeqa (56)\nmpbjcj (202) -> dksbpu, hromhg\nkdgxoi (65)\ntatvgv (48)\nlyuznk (78)\nvhgimqo (75)\nwiyuhex (160) -> gfquwm, qzjtxi, uswkbi\nhswecad (79)\nqwnxx (353) -> yxpavwg, ayode\nqjexd (10)\nhtvenp (130) -> quqts, ocvjwr\nvcpkha (309) -> jlslmo, wdeclb, hkanwp\ngyyld (91)\ntigky (335) -> wyusin, vdxfff\ndysfcb (1833) -> vtnsti, fswhfws, exnlyy, kkfcate\nmdtuwks (23)\npbdww (79)\newvfvx (55)\npxwsb (210) -> isozjve, vzubyy\nrscwd (81)\nabghrf (56)\nujsqcr (94) -> hdsvjwr, fbtqea, zxvtq\nqiyidu (46)\nxumyvt (197) -> mbsuxms, uezrt\nfdbehfx (86) -> pnwrdla, gyyld, twxghfp, rarvsbv\navwkq (63)\nocikhq (28)\nxzmtk (61)\nqezss (83) -> vnmhbwf, fvqgb, lvejxwu, orlwcra\njcbdf (34)\nrkupoek (83) -> kvolhll, zdtzt\nbgugou (39) -> ekhsurt, lpwze, xulggnd, mjckr\nocakmk (115) -> fvypts, rbeigk, jlvflv\nyiigtz (43)\nrovmviv (164) -> rnzglhk, fgfkrxp\nzmemxd (65)\nomvsg (80)\nysnvnu (110) -> cigzzld, wvjumh\nzrqzw (38) -> upbwakj, psldjp\ntbdfmz (79) -> nxvfovk, yiflicd\nydishxc (75)\ntqlyzrj (135) -> kotdcly, plifn\nlrwlhbc (257) -> wvibg, zqrfz\nxwkudo (23)\nvjhsczt (77) -> xmzvsd, nbycb\nqjfdh (83)\nizapo (237)\nfipmpb (13)\ndsjxy (31)\nbclda (68)\nzbnynh (56)\nhdhlyxq (63) -> hgmzkam, avwkq\nijzzl (28)\ngmgwaa (73) -> akcgcxy, plgldf\nhyufw (216)\njnfcc (93)\nswsva (65) -> atbxzb, zmkyj, elebwva, dnmrtok, gvfmsy, sjsfqhv, rehfw\nyriybrc (196) -> qpbebnc, fwmpx\nhhrqizc (250) -> aleenbl, yeoeyme\nidcowch (55)\nnsldzh (58)\nufewl (6) -> uoblmgo, oouozuv\nebqjlp (933) -> btabyp, byoksw, iuwokd, ksrbxbh\nhjtmfck (30)\ngjzwa (163) -> fipmpb, yroyqeo\nusnfnjb (53)\neviqdbq (15)\neqakw (90)\nltaujs (52)\nifrxho (32)\ngnqasz (22)\ngonru (25) -> mumpgs, ezrpvp\nlmipr (195) -> ykidq, xzmtk, xllppou\nvvmfk (35)\nsdqll (42)\njpwof (178) -> abdnunu, yhmbooy\nvfqbff (93) -> ydishxc, vhgimqo, wbjbpjf, roirllq\nfwmpx (76)\nknqruz (37)\nepnsvw (52)\nakznnid (69) -> bxgyjw, ebeltx, qedlf\nvhdyc (88)\nhqxsfn (97)\npgqenlk (143) -> rssmrnc, usnfnjb\njmyovo (68) -> hyurmnj, cftahaw\nwvibg (29)\npnlmj (40)\nlniuonj (216) -> eviqdbq, wikrvq\ngmuco (35)\nqqqsv (18) -> vsnpvm, qcblt\nigpyz (245) -> hvrve, owlwzwx\nkppigwv (1920) -> dtwdad, xhlgx, vqrcq\nrvwvokn (218)\nynubz (20)\nviwwie (699) -> nsfrscb, mpbjcj, rttcn, latbj, lehgocg, rovmviv\nrmyjxl (26)\nqyerfcc (63)\ndbuno (226) -> kjrup, bruwizl\niydwka (97)\nyxpkynj (192)\nibdhatw (75)\numnvlw (84)\ndfqahip (41)\npcxny (71)\nbseajmt (76)\nmqeep (460) -> ehcjup, kaihsu, jijdq, nrlmfax\nvuzxyz (6) -> fnwiq, sovwn\nqdtel (83)\neqyac (81) -> lyebndp, xnmmdhk\nmzrntf (11964) -> pxhqf, tohwd, imuik, aljvja\nnqcdwx (31)\nsdbkh (303) -> qdhte, qinuxsr, ymjxszk, pctyehs, axondt\ngqvnw (282)\neeupi (74)\nqhrmshn (41)\nhjibwmq (76)\nnqmfyxs (22)\ngrdyhff (69)\ntwrim (56)\ndjdmsc (42)\nmnieqt (87)\ncwwsi (87)\nhrbzakg (42)\njxvjp (236) -> mivzz, qjexd\nxflynr (45)\nhdpizox (41)\nvpjiwwm (22)\nteqabnc (81)\nmjckr (85) -> rioda, erqjppo\nwwskbob (59)\nwxexs (15)\nsnloung (42)\nmhzwwo (392) -> wyjbjf, nlpdso\nphomdt (47)\nmfjan (31)\nfrozh (367)\nlcvtfz (20)\nemjhgx (189) -> kteflr, ngwldiu, yfozx, bexvpzn\nvtnsti (104) -> gmuco, trzae\nnmqmbc (88)\ndlszm (74)\nlrpzf (33)\nibuys (98) -> xjjhicj, hyhcihf\nbnomgct (39)\nuibut (861) -> ojmudkf, ufewl, ioaogd\nbyoksw (91) -> semtwrh, ltpjwb\npblscqj (943) -> scrykpr, xuavduh, uaatgf\nzsetpb (12)\ncowhe (26)\ndvdbswf (187) -> ypfss, vjunjns, arlra, ngdhmz\nxgtged (77) -> eudjgoy, zvgxbve, plctc, teauca, qwnxx, abqar\npffhee (50)\nahvhqoe (35)\npamyclw (23)\nufwsbx (93) -> ngcyru, zjyhf, cqksxxm, jepix\npmecds (36)\nqoqdhpx (846) -> yrsfcq, jmfybp, qfvbg, lezek, mqeep, ayklc\npxhqf (197) -> akznnid, xoldlj, pgqenlk, aozsepf, tmhgfe\nwafanbg (79)\nnyimka (55)\nynypbb (47)\nwwmzjie (15)\ntarxkki (59)\nrehfw (221) -> lwzcyq, hrbzakg, ejtuc\nmykoaba (37) -> vbfwgo, lkwhxen\npzsdbxi (1621) -> jwftyhn, vyqni\nkktfosp (160) -> ywquvbe, uralh, ybcta\nahfsddo (35) -> fuwat, acmkv\nkteflr (55)\nhypma (19)\nwbjbpjf (75)\nemdaoqf (217) -> ibdhatw, akvdjmc\nqiwio (11) -> rvycq, duklm, rqura, ynypbb\nvnmhbwf (71)\nxiiamxd (10)\nuzxjy (37)\nymjxszk (30) -> fzofpn, wjmfbz, pytprd, lswgx\njcwdnlr (59)\nvulklzo (38)\nookot (17)\nmnenfrc (22)\nmixmiv (90) -> mfweuw, befeb, yybuekt\nzcvqw (40)\ngfygwj (5)\nkiqfls (31)\nivkymv (59) -> wxqadgl, fsowc, pczqv, untdlz\nmeajs (86)\ndhcgig (83)\nkbbck (87) -> teewbxk, ywxjbc\ngvfcl (24) -> vywneg, yjeavx\ntwxghfp (91)\ntngvv (27)\nkoklf (61) -> jqtbsy, eetpan, vamssbi, rvwvokn, vpjsxth"