From c54080fdc6f24ae2ed8035631b87395fcc199028 Mon Sep 17 00:00:00 2001 From: pingu Date: Thu, 12 Dec 2024 10:14:09 +0100 Subject: [PATCH] Slow correct --- aoc.cabal | 2 + app/12.hs | 30 ++++++++++-- inputs/12 | 140 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 169 insertions(+), 3 deletions(-) create mode 100644 inputs/12 diff --git a/aoc.cabal b/aoc.cabal index 413ff75..09995d9 100644 --- a/aoc.cabal +++ b/aoc.cabal @@ -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 diff --git a/app/12.hs b/app/12.hs index bf29854..dc27ef0 100644 --- a/app/12.hs +++ b/app/12.hs @@ -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) diff --git a/inputs/12 b/inputs/12 new file mode 100644 index 0000000..f0a83ac --- /dev/null +++ b/inputs/12 @@ -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