Slow correct

This commit is contained in:
pingu 2024-12-12 10:14:09 +01:00
parent ad760a6c83
commit c54080fdc6
3 changed files with 169 additions and 3 deletions

View File

@ -132,6 +132,8 @@ executable 12
-- other-extensions:
build-depends: base ^>=4.18.2.1
, split
, matrix
, containers
hs-source-dirs: app
default-language: GHC2021
executable 13

View File

@ -2,14 +2,38 @@
module Main where
import Data.Functor
import Data.Matrix hiding (trace)
import Data.List
import Debug.Trace
parse = undefined
parse :: String -> Matrix Char
parse = fromLists . lines
solve1 = undefined
getGroup :: (Int,Int) -> Matrix Char -> [(Int,Int)] -> [(Int,Int)]
getGroup p@(i,j) s v
| p `elem` v = v
| otherwise = let e = getElem i j s in
nub . (p:) $ filter((== Just e) . flip (uncurry safeGet) s) [(i,j+1),(i,j-1),(i+1,j),(i-1,j)] >>= \p' -> getGroup p' s (p:v)
where
groups :: Matrix Char -> [[(Int,Int)]]
groups s = nub $ go [(i,j) | i <- [1 .. nrows s], j <- [1 .. ncols s]] []
where go :: [(Int,Int)] -> [[(Int,Int)]] -> [[(Int,Int)]]
go [] v = v
go (x:xs) v
| any (x `elem`) v = go xs v
| otherwise = go xs (getGroup x s []:v)
perimeter :: [(Int,Int)] -> Int
perimeter s = length $ s >>= \(i,j) -> [(i,j+1),(i,j-1),(i+1,j),(i-1,j)] \\ s
solve1 :: Matrix Char -> Int
solve1 s = let g = groups s; p = perimeter <$> g in sum $ zipWith (*) (length <$> g) p
solve2 :: Matrix Char -> Int
solve2 = undefined
main :: IO ()
main = readFile "inputs/12" <&> parse >>= \i ->
main = readFile "inputs/12.example" <&> parse >>= \i ->
print (solve1 i) >>
print (solve2 i)

140
inputs/12 Normal file
View File

@ -0,0 +1,140 @@
WEEEEEFFFFFFFFFFFTTTTTTTTTTOBBBBQGGGQQQQQQQQQQQQQQQEEGGGGGGGGGGGGGOEMMMMMMMMMMMCMMMIIIIINWWWWWWDDDDDDDDDDDOOOOOOOOOOOOOOOOOXXXXWWWWWWWWWWWWW
WWEEEEWWFFFFFFFFFFFNNNTTTTOOOBBBQQQGGQQQQQQQQQQQQQEEEEGGGGGGGGGGGGOOOMMMMMMMMMMMMMMIIIINNVNNWWWDDDDDDDDDOOOOOOOOOOOOOOOOOOOXXXXCQWWWWWWWWWWW
WWWEEEWFFFFFFFFFFFNNNNNNTTOOOOBOQQQQQQQQQQQQQQQQQQEEEEEEGGGGGGGGGXOOOMMMMMMMMMMMMMMMINNNNNNNWWWDDDDDDDDDVQOOOOOOOOOOOOOOOOOXXXXCCCWWWWWWWWWW
WWWWWWWFFFFFFFFFFFNNNNNNNTOOOOOOUUQQQQQQQQQQQQQQQQEEEEGGGGGGGGGGROOBBMMMMMMMMMMMMMMMINNNNNNNWWDDDDDDDDDDVVVOOOOOOOOOOOOOOOGXXXXCCWWWWWWWWWWW
WWWWWWWTWFFFFFFFFNNFNNJJNNOOOOOUUUUNNNQQQQQQQQQQEEEEEEEEEGGGGGRGRRRRBMMMMMMMMMMMMMMMNNNNNNNNNNDDDDDDDDVVVVVHOOOOOOOOOOOOOOGGXXXXXWWWWWWWWWWW
WWWWWWWWWWFFFFGFFFFFFNOOOOOOOOUUUNNNNNQQQQQQQQQQEEEEEEEEGGYGYRRRRRRRBMMMMMMMMMMMMMMNNNNNNNNFFFDDDDDDDDDVUUUUUUUOOOOOOOOOOGGGGXXXXWWWWWWWWWWW
WWWWWWWWWWWWWGGGFFFFFFOOOOOOOOUNNNNNNNNNQQQQQQQEEEEEEEDGGYYYYRRRRRRRBUUMMMMMMMMMMMMCCNNNNNNFFDDDDDDDDDDDUUUUUUUOOOOOOOORGGGGGGGGGGWWWWWWWWWW
WWWWWWWWWWWWGGGGGFFFFFOOOOOOONNNNNNNNNNNNNQQQQQEEEEEEEEGGRRRRRRRRRUTUUUUUMMMMMMMMCMCCNNNNNNFFFDDDDDDDDDDUUUUUUUOOOORRORRRRRGGGGGGGGKKKWKWWWW
WWWWWWWWWWWGGGGGGFFFHFOOOOOONNNNNNNNNNNNNNNNQQQQEEEEEEEEERRRRRRRRRUUUUUUUMMMMMCCMCCCNNNNNNNNNFDDDDDDDDDGUUUUUUURORRRRRRRRGGGGGGGGGGKKKKKWWWW
WWWWWWWVGGGGGGGGGGGFVFOOOOOOOOONNNNNNNNNNNNNNWWQEEEEUEEERRRCCCCCCCUUUUUUTMIIIMCCCCCCNNNNNNNNNDDDUUDDDRDGUUUUUUURORRRRRRRRRGGGGGGGGGGKKKKKWWW
WWWWWWWGGGGGGGGGGGHVVBOOOOOOOOOONNNNNNNNNNTTWWHQEEEEUUEERRRCCCCCCCUUUUUUUIIIIMMCCCCNNNNNNNNNHDAANUNNNNNNUUUUUUURRRRRRRRRRRGGGGGGGGGAKKKKKWWW
WWWWWWWWWGGGGGYYGGVVVBOOOOVVVOOONNNNNNNNNNTWWWTTTEEUUUUURRRCCCCCCCUUUUUUUIIICCCCCCNNNNWWNNNNNNAANUNNNNNNUUUUUUUUUUUUUUUUHGGGGGGGGGGGKKKKKKWW
WWWWWWWWWGGGGYYYYYVVVBVOOVVVVVNNNNFFNNNNNNTTWWTTTTTUUUUUUURRRRRUUUUUUUUUUIICCCCCCCCCCCCCANNNNNAANNNNNNNNUUUUUUUUUUUUUUUUHGGGGGGGGGGGKKKKKKWW
WWWWWWWGGGGGGYYYYYVVVVVVQVVVVVNNXXXFFFFNFTTTTTTTTTTUUUUUUURRRRRRUUUUUUUUUIICCCCCCCCCCCCCAAAANNAAANNNNNNGGGGGGRUUUUUUUUUUUUUUUUUGGGGKKKKKKKGG
WWNWWWWGGGGGGGYYVYVVVVVVVVVVVVVNFFFFFFSFFTTTTTTTTTTUUUUUUURRRRRRWUUUUUUUUUUUCCCCCCCCCCCCAAAAAAAAANNNNNGGGGGRRRUUUUHUUUUUUUUUUUUGGGGKKKKKKKGG
WWGGGGGGGGGGGGYVVYVVVVVVVVVVVVVVFFFFFFSFFFFTTTTTTFTTUUUUUURRRRRWWUUUUUUUUAAUCCCCCCCCHCCAAAAPPPAAANNNNNVVGRRRRRUUUUHUUUUUUUUUUUUGKKKKKKKKKKKG
WDDGGGGPGGGGGYYVVVVVVVVVVVVVVVVVVVFFFFFFFTTTTTTTTFFFUUUUUBRRRRRRUUUUUUUUAAAAACCCCTCCMMAAAAPPPPPAANNPPVVVVZRZZZUUUUHUUUUUUUUUUUUKKKKKKKKKKKKG
DDDGDGGGGGGGGYYYVVVVVVVVVVVVVVVVVVFFFFFFFFTTTTTTTFFFFUBBBBBRRRRRUUUUUUUUUAAAAACCACCCMAAAAPPPPPPAPVVPVVVVVZZZZZUUUUHHHHHHHQUUUUUKKKKKKKKKKKKK
DDDDDDDGDGWWJYJVVVVVVVVVVVVVVVVVHHHHFFFFFFTTTTTFFFFFFUUBBBRRRRRRUUJRUUCUUAAAAAAAAMPCMMAAAAPPPPPAPJVVVVVVVZZZZZZHHHHHHHHHQQUUUUUKKKKKKKKKKKKK
DDDDDDDDDDJWJJJVVVVVVVVVVVVVVVVVHHHHFFFTFTTTTTFFFFFFFFBBBBBRRRRRRURRUUUAAAAAAAAMMMMCMMMMAAAPPPPPPJVVVVVVVZZZZRZZRHHHHNHHQQUUUUUZKKKKKKKKKKUK
DDDDDDDDDDJJJJJJJJJVVVVVVVVVVVVVHHHHFFFFHTTTTHTHFFFFBBBBBBBBRRRRRRRRRUUUUAAAAAAMMMMMMMMMPPPPPPPPPVVVVVVVVVVRZRZZRHHNNNDDQQUUUUUKKKKKKKKKKKUU
DDDDDDDDDDJJJJJJJJJVVQVVOVVVAAHVVHHHFFFFHHHTTHHHHFFRRRRRRRRBBBRRRRRRRRRUAAAANNNMMMMMMMMMYPPPPPPPPVVVVVVVVVVRRRRRRRRNNNDDDDDDDDDDKKKKKUKUUUUU
DDDDDDDDDDJJJJJJJJDVVQQVVVVVVVHHHHHHHHHHHHHHHHHHHFFRRRRRRRRBBBBRRRRRRKKNNAAANNNNNMMMMMMMPPPPPPPPVVVVVRRRVVVRRRRNRRRNDDDDDDDDDDDDNFFKKKUUUUUU
DDDDDDDDDDDDJJJJJJJQQQVVVVVVVVVHHHHHHHHHHHHHHHHHFFFRRRRRRRRBBBBEERRRKKKKNNNNNNNNMMMMMMMPPPPPPPPPPUUVVRRRRRRRRRRRRRRNDDDDDDDDDDDDNKKKNNUUUUUU
DDDDDDDDDDDJJJJJJJQQQQQVVOVPVHHHHHHHHHHHHHHHHHHHHFFRRRRRRRRGGEEEEERNNKKKNNNNNNNNMMMMMMMPPPPPPPPPPUUUUURRRRRRRRRRRRSDDDDDDDDDDDDDNNNNNUUUUUUU
DDDDDDDDDDDJJJJJJQQQQQQQOOOPPHHOHHHHHHHIHHHHHHHRRRRRRRRRRRRGGEEENNNNNNNNNNNNNNNMMMMMMMMMPPPPPPPPUUUUUUURRRRRRRRRRRSDDDDDDDDDDDDNNNNSNUUUUUUU
DDDDDDDDDDJJJJJJJQQQQQQOOOOOOOOOHHHHHHHIIHHHHIFRRRRRRRRRRRRRRGEEEEENNNNNNNNNNNNMMMMMMMMPPPPPPPPPUUUUUUURRRRRRYRRRSSDDDDDDDDDDDDNNNNSISSSUUUU
DDDDDDDDDDJJJJJJJJFFQQQOOJOOOOOOHHHHHHHIIHHIIIFRRRRRRRRRRRRRRGEEEEENNNNNNNNNNNMMMMMMMMMPPPPPPPPUUTTUUUURRLRPRYYYYYDDDDDNNNNNNNDNNNNSSSSSSUUU
DDDDDDDDDDJJJJJJJJFFQOOBOOOOOOQQHHHHHIIIIHIIIIFRRRRRRRRRRRRRRGEKKEEENNNNNNNNNNNMMMMMMMMMMPPPPPPTTTUUUUURRYRYYYYYYWDDDDDNNNNNNNNNNNSSSSSSUUUU
KKDDDDDDDDDJJJJJFJFQQOOOOOOOOOOOOHHIIIIIIIIIIIFRRRRRRRRRRRRRKKKKEEEENNNNNNNNNNNMMMMMQMMMMZPPPPPTTTUUUUUUUYYYYYYYYNNDDDNNNNNNNNNNNSSSSSSSSUUU
KDDDDDDDDDDDDKFFFFFFHHHHHHHHHOOODIHHIIIIIIIIIIFRRRRRRRRRRRRRRRRRRKENNNNNNNNNNNNMMMMMQXMMMZZPZTTTTTTUUUYUUYYYYYYYYYNNNNNNNNNNNNNNSSSSSSSSSSUU
KDDKDDKKKDDDKKFFFFFFHHHHHHHHHOOOIIIIIIIIIIIIIIIRRRRRRRRRRRMRRRRRRKKNNNNNNNNNNNNMMMMMQXMMMZZZZZTTTTTTUUYYYYYYYYYYYYNNNNNNNNNNNNNSSSSSSSSSSSUU
KDDKKKKKKKKKKFFFFFFFHHHHHHHHHOOOZIIIIIIIIIIIIMMEERRRRRRRRRMRRRRRRKKKKNNNNNNNNNNMGQQQQQQZMZZZZZTTTTLILLLYQYYYYYYYYNNNNNNNNNNNNNNNSSSSSSSSSSUU
KKKKKKKKKKCCFFFFFFFFHHHHHHHHHOOOZZIIIIIIIIIIMMMEERRRRRRRRRKKKKKKKKKKNNNNNNNNNCMMGGQQQQQZZZZZZZTTTLLLLLLYYYYYYYYYYYNNNNNNNNNNSNSSSSSSSSSSSUUU
NNKKKCCKKKCCFFFFFFOOHHHHHHHHHOOOZZZIZZXIIIIMMMMMMRRRRRRRRRKJKKKKKKKKKNNNCUNNNNNGGQQQQQZZZZZZZZZTTLLLLLLJYYYYYYYYYYNNNNNNNNNSSSSSSSSSHSSSSUUU
NNNKKCCCKKCFFFFFFFFFHHHHHHHHHOOOZZZZZZZCIICMMMMMMMMMMMMMJJJJJKKKKKKKKKKKCCCNNNNNQQQQQZZZZZZZZZTTTTLLLLLLLHHHYYYYYYYYYNNNNNNNNSSSSSSSSSUUUUUU
NNNCCCCCKCCCFFFFFFFFHHHHHHHHHOZZZZZZZZZCCCCMMMMMMMMMMMJJJJJJJJKKKKKKKKKKKCCCCNNCCCQCZZZZZZZZZZZZTTTLLLUHHHHHYYYYYYYYYNNNNNNNPPPSSSSSSSUUUUUU
NNEECCCCCCCCSFFFFFFFHHHHHHHHHOZZZZZZZWZCCCMMMMMMMMMMMJJJJJJJJJJJKKKKKKKKYCCCCCCCCCQCZZZZZZZZZZZZZTTTUUUUHHHHYYYYYYYYYNNUNNNNNGGGSGSSSSUUUUUU
NNEECCCCCCCCFFFFFGFFGVVOZZZZZZZZZZZZZZCCCCCMMMMMMMMMMMJJJJJJJJJJKKKKKKKKKATTTTCCCCQCCZZZZZZZZZZZZTKKUHUUHHHHHYYYYYYYYNNDZNNGGGGGQGGGGGGUUUUU
NNCCCCCCCCCPCFFFFGGFGVGZZZZZZZZZZZVZZZZZCCCMMMMMMMMMJJJJJJJJJJJJKKKKKKKKKATTTCCCCCCCCZZZZZZZZZZZTTKKUHHHHHHHHHYYYYYYYYYDZZZGGGGGGGGGGGGUUUUU
NCCCCCCCCCCCCFFFFGGFGGGZZZZZZZZVVVVVZZVCCCCCMYYYYYYYJJJJJJJJJJJDKKKKKKKKKTTTTTTCTTCCCCCZZZZZZZZZZTKKKKHHHHHHHHHHHYPYYYDDZGGGGGGGGGGGGGGGUUUU
NCCCCCCCCCCCGGFFGGGFGGZZZZPPZVVVVVVVVCVCCCCCCYYYYYYYGJJJJJJJJJJDKKKKKKKKKTTTTTRTTTCCCCCZCZZZZZZZZZKKKKKHHHHHHHHPPPPPYDUDDGGGGGGGGGGGGGGGUUUU
NNNCCCCCCCCCGGGGGGGGGGGZZZPPPVVVVVVVVVVVCCCHCCCYYYYYJJJJJJJJJJJJKKKKKKKKGTTTTTTTTCCCCCCCCZZZZZZZKKKKKKKHHHHHHHHHPPDDDDDDTGGGGGGGGGGGGRRGUUUU
NNNNCCCCCCCGGGGGGGGGGGGZZPPPPSVVVVVVVVVVHHHHCCCYYYYYJJJJJJJJJJJJJKKKDDKKGTTTTTTTTTTTTCCKKUZZZZZZKKKKKKKHHHHHLHHHPPPDDDDTTGGGGGGGGGGGGRRRUUUU
NNNNNCCCGGGGGGGGGGGGGGGGGPPPPSVVVVVVVVVXHHHHCCCYYYYYADDDJJJJJJJJJJKKDDDTTTTTTTTTTTTTTTTTKKKKKKKKKKKKKKKDDELLHHHHPPPPPDTTTTGGGGGGGGGGGRRRRUUU
NNNNNNCCGGGGGTTTGGGGGGGGPPPPPSVVVVVVVVVYYYYYYYYYCYEEAAADJJJJJJJZJJJKKKDTTTTTTTTTTTTTTTTKKKKKKKKKKKKKEEKDEEELLHPPPPPNPDTTTTGGTGGRRGGGRRRRUURR
NNNNNNCCCTTTTTTTTTGGPPPGGPPGGGVVVVVVVVHYYYYYYYYYCCAAAAAAJJJJJJJTTTJKKKTTTTTTTTTTTTTTTTTWKKKKKKKKKKEEEEEEEECELLPPPNNNNNNTTTTTTTGRRRRRRRRRRRRR
NNNNNNNNCTTTTTTTTGGPPPGGPPPGGVVVVVVVHHHYYYYYYYYYAAAAAAAQQQJJJJJTTTKKKKTTTTTTTTTTTTTTTTTTKKKKKKKKKKKEMEEEEEEEEPPPNNNNNNTTTTTTTGGRRRROORRRRRRR
NNNNNNNNNTTTTTTTTPPPPPPPPPGGGGVVVHHYYYYYYYYYYYYYAAAAAAAQQQJJJRJTTTTTTTTTTTTTTTTTTTTTTTKKKKKKKKKKKKKKKQEEEEEEEEFFNHNNNNNNNTTTTTOROOOOOOORRRRR
NNNNNNNNGITTTTTTPPPPPPPPPPGGGGGHHHHYYYYYYYYYYYYYAAAAAEAAQQQQQQTTTTTTTTTTTTTTTTTTTTTFTTKKKFKKFKLKKKKKKQEQQEEKKFFNNNNNNNNNNNNTTOOROOOOOGGORRRR
NNNNNNNGGTTTTTIPPPPFFFPPFGGGGGGGYYYYYYYYYYHHHAAAAAAAAAAAQQQQQQQTTTTTTTTTTJJJJJJJJTTFFFFFFFFFFKKKWNNQQQQQQGKKFFFNNNNNNNNNNNNTTOOOOOOOOOGORRRR
NNNNNNNGGGGGGGIIFPFFFFFFFGGGGGGGYYYYYYYYYYHHLAAAAAAAAAALQQQQQQQTTTTTTTTTTJJJJJJJJGTFFFFFFFFFFFFKNNNNQQQQQGGKKFNNNNNNNNNNONNTOOOOOOOOOOOOORRR
NNNNGNGGGGGGGGIIFFFFFFFFFGGGGGGGYYYYYYYYYYHHAAAAAAALLLLLLYQQQQQTTJJJJJJJJJJJJJJJJGFFFFFFFFFFFFFFNNNNNNQGGGGGGGQGNNNNNNNNNNHHHOOOOOOOOOOOORRR
NNGGGGGGGGGGGGGIIFFFFFFFFFGGGGGGYYYYYYYYYYGHANAAAAHLLLLLLYQQQQQJJJJJJJJJJJJJJJJJJFFFFFFFFFFFFFFFRNNNNQQQQQQQQQQGNNNNNNNNNHHHHOOOOOOOOOOORRII
NNNGGGGGGGGGGGGGIFFFFFFFFFCGGGGGYYYYYYYYYHHHANANNAALLLLLLYYQQQQJJJJJJJJJJJJJJJJJJFFFFFFFFFFFFFFFNNNNNQQQQQQQQQQGVNNNNNNNNHHHHOOOOOOOOOIIRRII
NNGGGGGGGGGGGGQQFFFFFFFFFFGGGGGPPGGHHLTTEHHNNNNNNCALLLLAAYYQAQWJJJJJJJJJJJJJJJJJJWFFFFFFFFFFFFFFFNNNNQQQQQQQQQQGGIINDNNNNNPPPPOOOOOOOOIIIIII
NNGGGGGGGGGGGGQQKKFFFFFFFFFUGPPPPGGHITTTTTTNNNNNNNKLLLLLAYYYQQWJJJJJJJJJJJJJJJJJJWFFFFFFFFFFFFFFRFFNNQQQQQQQQQQGGIIINNNNNNPPPPFOOOOOOOIIIIII
NNNGGGGGGGGGGQQKIKFFFFFFFFPPPPPPPPPPIJJJJJNNNNNNNWLLLLLAJJJJJJJJJJJJJJJJJJJJJJJJJWWFZFFFFFFFFFFFFFRRRQQQQQQQQQQQIIIINNNNPPPPPFFOOOOOOOIIIIII
NNNGGGGGGGGGGGKKKKFFFFFFFFFPPPPPPPPPIJJJTTNNNNNNLLLLLLAAJJJJJJJJJJJJJJJJJJJJJJJJJWWPPPPFFPFFFFFFFRRRRQQQQQQQQQQQIIIINNNPPPPPPPAOOOOODIIIIIII
NNGGGGGGGGGGGGKKKKKKFFFFFFFPPPPPPPPPPJJJTTTNNNNAAAAAAAAAJJJJJJJJJJJJJJJJJJJJJJJJJWWPPPPPPPFFFFRFFRRRRQQQQQQQQQQQYIYIINNNPPPPPPAOOOOODIIIIIII
GGGGGGGIGXGKKGKKKKKFFFFFFFUUUUPPPPPPJJJJJJJNNNAAAAAAAAAAJJJJJJJJJJJJJJJJJJJWWWQWWWWPPPPPPKKFFNRRRRRRRQQQQQQQQQQQYYYYYYPPPPPPPPAAAAAIIIIIIIII
XGGGGGGGGXXKKKKKKKKFFFFFUUUUUPPPPPPPJJJJJJJNNOAAAAAAAAAAJJJJJJJJJJJJJJJJJJJWWWQWWWPPPPPPPKKVVVRRRRRRRRMMMRYYYRYYYYYYYPPPPPPPPAAAAAAIIIIIIIII
XGXXXXXXXXKKKKKKKKKBBFBBPPPPPPPPPJJJJJJJJJIOOOAAAAAAAAAAJJJJJJJJGVJJJJJJJWEEEQQWWPPPPPPPPPPVVVVVVRRRRMMMMRRYYYYYYYYYYYYPPPPPPAAAAAAIIIIIIIII
XXXXXXXXXXKKKKKKKKBBBBBBBBBBBBCJJJJJJJJJJJOOOOOOOAAAAAAAJJJJJJJJGVJJEEEEEEEEEQQWWWPPPPPPFPVVVVVVVQVVRRMMRRRRYYYYYYYYYYYTPPPPAAAAAAAAAIIIIIII
XXXXXXPXKKKKKKKKKKKBBBBBBBBBCBCJJJJJJJJOOOWWOOOOOAAAAAAGJJJJJJJJGJJJEEEEEEEEEEEEEEPPPPPVVVVVVVVVQQVVRRMRRRRRRRYYYYYYYYYYAAAAAAAAAAAAAIIIIIII
XXSXPPPPPKKKKKKKKBBBBBBBBBBBCBCJJJJJJJJOOOOWOOOOOOOAAGAGJJJJJJJJGJJLEEEEEEEEEEEEEEPPPPPVVVVVVVVVVVVVRRRRRRRRRRYYYYYYYYWWAAAAAAAAAAAAAAIIIEIE
XXSXPPPPPPKKPPPKBBBBBBBBBBCBCCCJJJJJJJOOOOOOOOOOOOLLLGGGGGGGGGGGGGJLLJFFFJQEEEEEEEPPPPPPVVVVVVVVVVVVVVRRRKRRRYYYYYYYYYWWAAAAAAAAAAAAIIIIEEEE
XXSSPPPPPPPKPPPPPBBBBBBCCCCCCCCCJJJJJJJOOOOOOOOOOOILLLGWWGGGGGGGGGZMMMMMMZQEEEEEEEPPPPPTTVVVVVVVVVVWKKKKKKKKRRQQQQYYYYYWWWAAAAAAAAAAAAAAAAEE
XXSMPPPPPPPPPPPPBBBBBBBCCCCCCCCCCJJJDJDDOOOOOOOOOOLLLLOLLLGGGGGGGGMMMMMCCMFEEEEEEETPPPPTXXXVVVVVVVVVKKKKKKKKRRRQQQQQYYYYWWIAAAAAAAAAAAAAAEEE
XXSSSSSPPPPPPPPPPBBBCCCCCCCCCCCCCJDJDOODDOOOOOOOOLLLLLLLLLGGGGGGGGGMMTMMEEEEEEEEEETTPTTTTVVVVVVVVVVVKKKKKKKKRRQQQQQYYWYWWWIIAAAAAAAAAAAAAAAE
XXSSSBSPPPPPPPPPPBBBBCCCCCCCCCCCCCDDDDDDDOOOOOOOOLLLLLLLLLQLGGGGGGGRGTMMEEEEEEEEEETTTTTTVVVVVVVVVVVVKKKKKKKKRRQQQQQQQWWWWWIIAIAAAAAAAAAAAAGO
XXSSXPPPPPPPPPPPPWWWWCCNCUCCCCCCCZDDDDDDDOOOOOOOOQLLLLLLLLLLGGLGGGGGGTMMEEEEEEEEEETTTTTTVVVVVTTHVVVVKKKKKKKKKRQQQQQQWWWWWIIIIIIAAAAAAAAAOOOO
XXXXXXXPPPPPPPPPPWWWWCINCCCCCCCCCDDDDDDDDOOOOOOWOORLLLLLLLLLLLLGMGMMNMMMEEEEEEEEEETTTTTTVVVTTTTTKKKKKKKKKKKKKKQQQQQQWWIIIIIIIIIAAAAAAAAAAOOO
XXXXXXXPPPPPTTPPPWWWWWWNNNNBBBBBBDDDDDDDDOOOOOOWOOLKLLLLLLLLLLLQMMMMNMMMEEEEEEEEEETTTTTTTTTTTTTKKKKKKKKKKKKKKQQQQQQQWIIIIIIIIIIIIOOOAAAOOOOO
JJJXJJXPPPPNTTTWWWWWWWNNNNNBBBBBBUDDDDDDDOOOWWWWWFLLLLLLLLLLLLLLLMMMMMMMEEEEEEEEEETTTTTTTTTTTTTTKKKKKKKKKKKKKQQQQQQQWWWIIIIIIIIIIIQOAAAOOOOO
JJJJJJJJPPPNTTTTTWWWNNNNNNNBBBBBBDDDDDDDDOOOWWWWWLLLLLLLLLLLLMLLMMMMMMMMMEEEEEEEEETTTTTTTTTTTTTTTKKKKKKKKKKKKQQTQTQQQIIIIIIIIIIIIIIOKAOOOOOO
JJJJJJJNNNNNNTTTTTWWNNNNNNBBBBBBBDDDDDDDDDOWWWWWWBBLLLLLLLLLMMLLMMMMMMMMMEEEEEEQQQTTTTTTTTTTTTTKKKKKKKKKKKKKFQQTTTKXXIIIIIIIIIIOOHHHHKOOOOOO
JJJJJJJNNWNNNTTTTNNWNNNNNNBBBBBBBSVDDDDDXXOOOWWWBBBLLLLLLULLMMMMMMMMMMMMWMEEEEBBQQQQQTTKTOTTTTTTKKKKKKKKKKKKKKQQTKKXXXIIIIIIIIIHHHHHHKOOOOOO
JJJJJJWWWWWNNTTTTNNWNNNNNNBBBBBBBVVVVVEDXXXXWWWWWWBSSLTTLMLMMMMMMMMMMMMMMBEEEEBBQBBQQQQQOOTTTTTTTKKKKKKKKKKKKKKQKKKKKXXIIIIIIIIHHHHHHOOOOOOO
JJJJJDDWWWWNNNTTTNNNNNNNNNBBBBBBBVVVVVVDXXXXWWWWWBBOOOTTMMMMMMMMMMMMMMMMBBEEEEBBBBQQQQQQOOTTTTTTTTKKKKKKKKKKKKKKKKKKKXXXXXIIIIIHHHOOOOOOOOOO
JUJJJWWWWWWNNNTTNNNNNNNNNNNBBBBBBVVVVVVDXXXXXWWWWBBBOOMMMMMMMMMMMBBBMBBMBBEEEEBBBQQQQQQQTTTTTTTTTTKKKKKKKKKKKKKKKKKKKXXXXXIIIIIHHHOOOOOOOOOO
JUWWWWWWWWWWWNNNNNNNNNNNNNNBBBBBBJVVVVVDXXXXXXXXWOOOOOMMMMMMMMMMMBBBBBBBBBEEEEBBQQQQQPQPTTTTTTTTTKKKKKKKKKKKKKKKKKKKKXPPPPIIIIPHHHOOOOOOOOOO
UUUWWWWWWWWWWWWWWWNNNNGGNNGBBBBBBJVVVJXXXXXXXXOOOOOOOOGGMMMMMMMBBBBBBBBBBBEEEEBMQTTPPPQPPTTTTTTTTTKVVVVVVVVVVVVVKKKKKPPPPPZZIPPHHHOOOOOOOOOO
UUUWWWWWWWWWWWWWWWNNNGGGGGGGGBBBBJJJJJJXXXXXXOOOOOOOOOOGMVMMMMMBBBBBBBBBBBEEEEBBBTTTTPPPTTTTTTTTTTKVVVVVVVVVVVVVKKKKKNPPPPPPEEEHHHOOOOOOOOMO
UUUWWWWWWWWWWWWWWNNNNGGGGGGGGBBBBJJJJJJJXXXXXOEOOOOOOOOOOMMMMMMMCCCCBBBBBBBBBBBAAATTTTTPTTTTTTTTTKKVVVVVVVVVVVVVKKKPCPPPPPPPPEEHHHOOOOOOOOMM
UUUWWWWWWWWWWWXXNNNNGGGGGGGGGBBBBJJJJJJXXXXXXOOOOOOOOOOOMMMMMMCCCICCBBBBBBBBBBBTTTSSSSSSSSSZTTTTTUUVVVVVVVVVVVVVKPPPPPPPPPPPNNEHHHFFOFOOOMMM
UUUWWWWWWWWWWWXNNNNGGGGGGGGGGJJJJJJJJJJJXXXXXXXOOOOOOOOOMFMMIIIICIIIIBBBBBBBYBLTTTSSSSSSSSSTTUTXUUUVVVVVVVVVVVVVKPPPPPPPPPPNNNNNPPFFFFFOMMMM
UUUUWWWWWWWWWWXNNNNNGGGGGGGGGJJJJJJJJXXXXXXXXXZQOOOOOOVOFFFMIIIIIIIIIIBBBBBBBBTTTTSSSSSSSSSUUUTUUUUVVVVVVVVVVVVVKPPPPPPPPPPPNNNNNNFFFFFQMMMM
UUUWWWWWWWWWWXXXXXGGGGGGGGGGGGGJJJJJJJJXXXXXXXZZOOOOOOOIIIMMIIIIIIIIIIBBBBBBWBTTTTSSSSSSSSSUUVVVVVVVVVVVVVVVVVVVKPPPPPPPPPPPNNNNNFFFFFQQQMMM
UUUUWWWWWWWZWWXNXXXXGGGGGGGGGGJJJJJJJJXXXXXXZZZZDDDOOOOIIIIIIIIIIIIIIIBGFFBBWTTTTTSSSSSSSSSUUVVVVVVVVVVVVVVVVAAKKPPPPPPPPPPNNNNNNNNQQQQQQMMM
UUWWWWWWWUUWWNNNNXXXGGGGGGGGJJJJJJJJJJJXXZZZZZZZZDDZOOHBIIIIIIIIIIIIIGGGGBBBWTTTTTSSSSSSSSSUUVVVVVVVVVVVVVVVVAAKKPPPPPPPPPPNNNNNNNNNQQQQQMQQ
UUWWWUUWUUNNWNNNNXXGGGGGGGGGJJJJJJJJJJXXXXZZZZZZZZZZKKHIIIIIIIIIIIIIIGGGGGBBWTTTTTSSSSSSSSSUUVVVVVVVVVVVVVVVVAAAKKKPPPPPPPPPPPNNNNSSSQQQQQQQ
UUWWUUUUUNNNNNNNRRXXGFGGGGGJJJJJJJJJJJJXXXZZZZZZZZZKKKHHIIIIIPIIIIIIWGGGGGGBBTTTTLSSSSSSSSSSUVVVVVVVVUUUUVAAAAAAAKKPPPPPPPPPPPNNNSSSSQQQQQQK
UUUWUNNNNNNNNNNRRBRRGFGGGGGJFJJJJJJJJJJXXXZHHZZZKZZKKKHHIIIIPPPPIIIIIGGGGGGGGTTTLLSSSSSSSSSSAVVVVVVVVUUUUVAAAAAKKKKPPBBBBPPPPPSNSSSQQQQQQQQK
UUUUUNNNNNNNNNNRRRRRFFGGGGGJFFFJJJJJJJJJXOHHZZZKKKKKHHHHHIIIPPPPIGGGGGGGGGGGGGTTTLLAAAAASSSSAAAUUUUUUUUUUUAAAAAAAKKKBBBBBBPPPSSSSSSSSSQKQQQK
UUUUUUUNNNNNNNNNRRRRFFGGFFGFFFFFFJJJJJOOOOHOCZKKKKKHHHHHHIIIPPPPPGGGGGGGGGGGGGTTTTAAAAAASSSSAAAUUUUUUUUUAAAAAAAAAKKKBBBBBBBBBSBSSSSSSDDKKQQK
UUUUUUUUNNNNNNNRRRRRFFGFFFFFFFFFFFJJJJOOOOHOOKKKKKKKHHHHHHHHCCPPGGGGGGGGGGGBBBBBBBAAAAAASSSSAAAUUUUUUUUAAAAAAAAAAABBBBBBBBBBBBBSBSSSSDDDKKKK
UUUUUUUUUUNNNNRRRRRFFFGFFFFFFFFFFFJJJOOOOOOOOKKKKKHHHHHHHHHHCHPPPGGGGGGGGGGBBBBBBBAAAAAAAAAAAAAAUUUUJJUAAAAAAAAAAFFBBBBBBBBBBBBBBBDDDDDKKDDK
UUUUUUUUUUNNNRRRRRRRRFFFFFFFFFFKJJJJJJOOOOOOOOKKZZHHHHHHHHHHHHYPZGGGGGGGGGGBBBBBBBAAAAAAAAAAAAAUUUUUUUUAAAAAAAAAAABBBBBBBBBBBBWBBBWDDDDKKDDK
UUUUUUUUUUNBNRRRRRRRRRFRFFFFKKKKKKKOOOOOOOOOOKKKZZHHHHHHHHHHHHYZZYGGGYYGGYGGGGGGAAAAAAAAAAAAQQQUUUUUZAAAAAAAAAAABBBBBBBBBBBBYSWWWBWDDDDKDDKK
UUUUUUUUUUNBNURRRRRRRRRRKFKKVKKKKKYYOOOOOOOOOOZZZZZZHHHHHHHHHHYYYYYYYYYYYYGGGGGGGAAAAAAAAAQQQQQQQQULZAAAAAAAAAAAABBBBBBBBBBBYSSSWWWWWDDDDDKK
DDDDUUUUUUNBBBRRRRRRRRRPKKKKKKKKKKYKOOOOOOOOZZZZZZZZZHHZHHHHHHYYXXXYYYYYYYYGGGGGGAAAAAAAAQQQQQQQQQUUZAAAAAAAAAAAABBBBBBBBBBBYYSSSWWWDDDDDDPP
DDDDDDDUUUBBBBRRRRRRRRKKKKKKKKKKKKKKVOOOOOOOOZZZZZZZZHZZHHHHHYGYXYYYYYYYYWWWWCJCAAAQQQAAQQQQQQQQQUUZZZZZAAAAAAAAABBBBBBBBBBYYSSSSSWZDDDPDDPP
DDDDDDDDDBBBBBBRRRRRHKKKKKKKKKKKKKKKOOOOOOOOOOZZZZZZZZZZZHHQQYYYYYYYYYYYYYYWCCCCCAAQQWQQQQQQQQQQQZZZZZZZAAAAAAAAHBALLOBBRBBBSSSSZZZZDDDPPPPP
DDDDDDDDDDBBBBBLLNRRNNNKKKKKKKKKKKKKOOOOOOOOOOZZZZZZZZZZZZZQQQQQQYYYYYYYYYYYCCCCCMQQQQQQQQQQQQQQQZZZZZZZZZZZAAAAAAAALOORRBRRSSSSZZZZZDDDPPPP
DDDDDDDDDDDBUBBLLNRRNNNKKKKKKKKKKKKKOOOOOOOOOOOZZZZZZZZZZZQQQQQQYYYYYYYYYYYYCCCCCCQQQQQQQQQQQQQQQQQZZZZZZZZZZAAAAOOOOOORRRRRSSSZZZZZZZDPPPPP
DDDDDDDDDDDFBBQLNNNNNNKKKKKKKKKKKKKFFFOOOOOOOZZZZZZZZZZZZZZQQQQYYYYYYYYYYYYYNYCCCCQJQQQQQQQQQQQQQPZZZZZZZZAZZJAOOOOOOOOZZRRRRSSZZZZZZZZZPPPP
DDDDDDDDDDDDNLLLNNNNVVKKKKKKKKKKKFFFFAOOOOOOOOZZZZZZZZZZZQQQQQQYYYYYYYYYYYYYYYCCCCCJQQQQQQQQQQQQQQSZZZZEZEAOOOOOOOOOOOARRRRSSSZZZZZZZZZPPPPP
DDDDDDDDDDDNNNLNNNNNNNKKKKKKKKKKFFFFFOOOOOOOOOZZZZZZZZZZZZZQQQQQYYYYYYYYYYYLYCCCCCPJQQQQQQQQQQQQQJZZEEEEEEAAOOOOOOOOOOOREEESSHHZZZZZZZPPPPPP
DDDDDDDDDDDNNNNNNNNNNNNKKKKKKKKKKFFFFFFFFOOOOOZZZZZZZZZZUUZQQQQYYJYYJJLYYLLLCCCCCCPPQQQQQQQQQQQQQJJTTREEEEAAAOOOOOOOOOOOEEESSHHZZZZZZZPPPPPP
DDDDDDDDDDNNNNNNNNNNNNOKKKKKKKKKFFFFFFFFDOOOOOOOHZZZZZZZUUQQQQUYYJJJJJLLLLLLLLLCPPPPPPPQQQQQQQQQQTTTTTTEEEEAAAOOOOOOOOOOOEEYSHHHZZZZZZPPPPPP
DDDDDDDDDDNNNNNNNNNNNNNKWWKKKKFFFFFFFFFFFFFOOOOOZZZZZZZUUUUUUQUUQJJJJLLLLLLLLCCCCPPPPPPPPQQQQQQQUTTTTTEEEEEAAAAAAOOOOOOOOEEYSXPBZZZZPPPPPPPP
DDMDDDDDDDNNNNNNNNNNNNNNWKKKKFFFFFFFFFFFFFFFOOOOZZZZZUUUUUUUUUUUQQQJJLLLLLLLLLCCCCPPPPPPPQQPQPGGGTGTTTEEEEEAAAXAAAOOOOOBOEYYPPPPPPPPPPPPPPPP
DWDDDDDDDDNNNNNNNNNNNNNFUUUQQFFFFFFFFFFFFFFFOOFZZZKKKKKKKUUUUUUUQQQQQCLLLLLLCCCCCPPPPPPPPPPPMGGGGGGGTTGJJJJAAAAAAAAAAGOOOEYYYXPPPPPPPPPPPPPP
WWDDDDDDDNNNNNNINNNNNNNNUULDQFFFFFFFFFFFFFFFONZZZZKKKKKKKUUUUUUUQQQCQCLCCLCCCCCCCCPPPPPPPPJPMGGGGGGGGGGGGJJJJJAAAAAAAAAZYYYYYYPPPPPPPPEPPPPP
WWDDDDDDDNNNINIIINNNNNNNUULDDEFFFFFFFFFFFFFFFFOOOONNNKKKKUUUUUUUQQQCCCCCCCCCCCCCCPPPPPPPPPJPMMMGGGGGGGGGGJJJJAAAAAAAAAYZYYYYYPPPPPPPPPEEPPPP
WYYDDDDDUIIIIIIIIINNNNNUUUDDDFFFDFFFFFFFFFFCFOOONNNNKKKUUUUUUUUUQQQCCCCCCCCCCCCCCCPPPPPPPPPPMMMMMMGGGGGGGJJJAAAAAAAAAAYYYYYYYYYPPPPPPEEEPPPP
YYYUUDDUUIIIIIIIIINNNNUUUDDDDDDDDFFFFFFFFNNNNMMMMMMMMMKUUUUUUUUQQQQQQCCCCCCCCCCCCPPPPPPPPPPPMMMMMMMGGGGXJJJAAAAAAAAAAAYYYYYYYYYYMMPPEEEEEPPP
YYUUUUUUUIIIIIIIIIIUNNUUDDDDDDDDFFFFFFFFNNNNNMMMMMMMMMKKKUUUBUQQQQQQQQCCCCCCCCCCCPPPPPPPPPPPMMMMMMMGGGNXMMJJAMAAAAAAAAAYYYYYYYYYYYPPEIEEEPPP
YYYUUUUUUUIIIIIIIIIUUUUUDDDDDDDDFFFFFFFFNNNNNMMMMMMMMMMKKWKUBUUQQQQQQQQCCCCCCHHCCPPPPPPPPMMMMMMMMMMMXXXXMMMMMMAAAAAADAAYYYYYYYYYYYPYEEEEEPPP
YYUUUUUUIIIIIIIGUUUUUUUUUUDDFFFFFFFFFFFNNNNNNMMMMMMMMMMKKKKXKKKKQQQQQQQCCCCCHHHCCPPPPPPPNNMMMMMMMMXXXXXXMMMMMMAAAAAAAAYYYYYYYYYYYYYYYYEEEEPP
YYYYUUUIIIIIIIIIIIUUUUUUUUUUUFFFFFFFFFNNNNNNNMMMMMMMMMMKKKKKKKQQQQQQQQQCCCHHHHHHHPPNNPNNNNMMMMMMMXXXXXXXXMMMMMMMAAGDDAAYYYYYYYYYYYYYYYEEEEPP
UYUYYUUIIIIIIIUUIUUUUUUUUUUUUUUUFFFFFFNNNNTTTMMMMMMMMMMKKKKKKKLQQQQQQQQCCHHHHHHHHNNNNNNNNNMMMMMMMXXXXXXXXMMMMMMMMAMDDDDDDYYYYYYYYYYYYEEEEEEE
UYUUUUIIIIIIIIIUUUUUUUUUUUUUUUUUFFFFFFNTTTTTTMMMMMMMMMMKKKKKKKQQQQQGGGQQHHHHHHHHHNNNNNNNNNMMMMMMMXXXXXXXXXMMMMMMMMMDDDDDDDYYYYYYYYYYYEEEEBEA
UYUUUUUIIIIIIIIUUUUUUUUUUUIUPIUUFFFFNNNTTTTTTMMMMMMMMMMKKKKKWWQQQQQQQGQQTTHHHHHHHNNNNNNNNMMMMMMMXXXXXXXXXXXMMMMMDDDDDDDDJDYYYYYYYYYYYYEEEEEA
UUUUUUUIIIIIIIUUUUUUUUUUUUIIIIFFFFFFFNNTTTTTTTNNNMMMMMMKKKKKKWQQQQQQQQTTTTHHHHHHHHNNNNNNNMRRRMMMMXXXXXXXXXXMMMMMMMDDDDDDDDDDDYYYYYYYYGEEAAEA
UUUUPUUIIIIIIIIIUUUUIIIUIIIIIIIFFFFFFNBBNNTTTTNNNMMMMMMKKKKWWWWQQQQQQQQTTHHHHHHHHHHNNNNNNRRRRRMMMMMXXXXXXXMMMMMMMMMDDDDDDDDCYYXYYYYNYGEGGAAA
UPPUPUPIIDIIIIIIUUUUIIIIIIIITTIFNNFJJJBBBNTTTTNUUMMMMMKKKKKWWWWQQQQQQQQTTTHHHHHHHHHNNNNNNRRRRRRRSSSSSXXXXXMMMMMMMMMDDDDDDDZNNYXNYYNNNGGGGGGG
PPPUPPPPPIIIIUUUUUUIIIIIIIIIITTNNNNJJAEBBNTTTTUUKKKKKKKKKKWWWWQQRQTQQQTTTHHHHHHHHHHNNNNNCRRRRRRRRLSSSXXXOXMMMMMMMMMMDDVVDDZNNNNNNYNNNGGGGGGI
PPPPPPPPPPIUUUUUUUUIIIIIIIIINTNNNNREEEENNNNWNUUUUUKKKKKKKKWWWQQRRTTTQQTTTTHHHHHHAAHNNNNNRRRRRRRSSSSSSSXXOOMOOMMMMMMMDDRVVZZZZNNNNNNNRGGGGGGG
PPPPPPPPPPPPUUUUUUIIIIIIIIIINTTNNNRRREEEEJNNBUUUUUKKKKKKEERRRRRRRTBTTTTTTTTHHAAHAAHNNNNDRRRRRRRSSSSSSSOOOOOOOOMMMMMMMMVVVZZZNNNNNNNNNNGGGGGG
EEPPPPPPPUUUUUUUIIIIIIIIIINNNNNNNNRRREEYYEINBBBUBBKKKKKKEERRRRRRTTTTTTTTTTHHHHAAAAHNNNNDBRRRRRSSSSSSSSSSOOOOOMMMMMMMMVVVVZNNNNNNNNNNNGGGGGGG
EGGGGGGPPPUUUUUUUIIIIIIIIINNNNNNNNNRRREEEEIIIBBBBBCKKEEEERRRRRRRTTTJTTTTTTHHTHAAAAANNNDDDDJRRSSSSSSSMMMMOOOOOMMMMMMMVVVVVNNNNNNNNNNNNNGGGGGG
EGGGGGGGGPPUUUUUUIIIIIIIINNNNNNNNNNEEEEEEEIIBBBBBBBEEEEEEERRRRTTTTTJTTTTTTTTTHAEAANNNNDSSSSRRSSSSSSSSMGMMMGGMMMMMMMMVVVVVNNNNNNNNNNNNGGGGGGG
EGGGGGGGDPPUUUUUUIIIIIIINNNNNNNNNNNNEEEEEEBBBBBBBBBEEEEEEEEERTTTTTTTTTTTTTTTTEEEEEEUUUUUSSSRSSSSSSSSSGGGGGGGMMMMMVVVVVVVVNNNNNNNNNNNNGGGGGGG
EGGGGGGGGPPUUUUUUIIIIIIINNNNNNNNNNNNNEEEEGGBBBBBBBBBBEEEEEEEETTTTTTTTTTTTTTTTTEEEEEEUUUUSSSSSSSSSSSGGGGGGGGGGMMMMVVMMVVVMMNNNNNNNNNNNNNGGGGG
EEGGGGGGGGPUOUUUUFFIIIINNNNNNNNNNNNNEEEEEEBBBBBBBBBBBBBBEEEEETTTTTTTTTTTTTTTTTTEEEEUUUUFFSSSSKKSSSGGGGGGGGGGMMMMMMMMMVVVMMNNNNNNNNNNNNNGGGGG
GGGGGGGGGGGGOUUUFFFIIIIINNNNNNNNNNNNEEEEEBBBBBBBBBBBBBBBEEEEEEEETTTTTTTTTTTTTTTTEUUUUUUFFSSKKKKSSSSGGGGGGGGGGMMMMMMMMVVVMMMNNNNNNNNNGGGGGGGG
GGGGGGGGGGOGOOUOOFIIIIFFNNNNNNNNNNNEEEEEEEEEBBBBBBBBBBBBEEEEEEEETTTTTTTTTTTTTTTTEUUUUUUFFFKKKKKKSSSSSGGGGGGGGGMMMMMMMMMMMMNNNNNNNNNNSGGGGFGG
VGGGGGGGGGOOOOOOOFFFFFFFNNNNNNNNNNNNNEEEEEEEEBBBBBBBBBBBEEEEEEEEEETTTTTTTTTTTTTEEEUUUUUFXXKKKKKKKSSSSGGGNGGGJGMMMMMMMMMMMMNNNNNNNJNNSSGFFFGG