-
Notifications
You must be signed in to change notification settings - Fork 22
/
Copy pathMeetingRoom2_253.java
207 lines (182 loc) · 61.6 KB
/
MeetingRoom2_253.java
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
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
package com.leetcode.problems.medium;
import java.util.*;
/**
* @author neeraj on 02/09/19
* Copyright (c) 2019, data-structures.
* All rights reserved.
*/
public class MeetingRoom2_253 {
private static String ARRIVAL = "Arrival";
private static String DEPARTURE = "Departure";
public static void main(String[] args) {
solveProblem(new int[][]{
{0, 30}, {5, 10}, {15, 20}
});
solveProblem(new int[][]{
{7, 10}, {2, 4}
});
solveProblem(new int[][]{
{2, 15}, {36, 45}, {9, 29}, {16, 23}, {4, 9}
});
solveProblem(new int[][]{
{928, 5032}, {3072, 3741}, {3960, 4588}, {482, 2269}, {2030, 4360}, {150, 772}
});
solveProblem(new int[][]{
{9, 50}, {30, 37}, {39, 45}, {4, 22}, {20, 43}, {1, 7}
});
solveProblem(new int[][]{
{9, 50}, {30, 37}, {20, 43}, {1, 7}
});
// System.out.println(frequencySort("abca"));
// System.out.println(frequencySort("loveleetcode"));
// System.out.println(frequencySort("abcabc"));
// System.out.println(frequencySort("qcbkrbolomdwttlhqbldbuscinrsjrvmhjltvplkilimtfpkllobenptthmxfpfdiqrqjfbowklsnqvgfqaitsavhgraicmnvfklodarkcdikfocgxkrotwdubpuadbmerhlsrxdslrnamkwokedviqksjhtpsvpplxioxwsivnjrfiknxvwjqxmroawtxpxuntldepqlhwmmaahdxosiecqjqdmorqdvfklhkhukcvoqmdeajoqmndglphvpchtbmnadpjhhxrixdbcepwpdbxhfkfcgqvqqsmdqelijlksqtrhqpfxpqakadvrsmcrkpwtvanpibscdnufkcurgegxvigvvovwhdmabvqnmqxsqacueiddsdqxksrtgvhxhnftgrmanhrjhokcejbqchxjrbffftpncgsllnqktxbqanmbufonowkfamdckoghagdaqjudgaxvtoritlmmoasejeclgxdwbnxlnnscokkdirrqamiujphfdclghwpindgkjqxpmndxxolanjngrkaageffgtsxnpraxuwcgijtanqarhrjwawwclratfldpcasuhvufmngunxjmjunwcqopwxvpvkdvuccjsemcrwqbpbboghskihqfpogitihffqpwnusupfkjlvlxvkrcscmeexlqxfpbfbrlhnxkwjdkbmuhpejoxctugbknratxmwbjsgsovdlwjggougcxjounvvvbjsujjxwgeidhollucsifehvtopphjlelglswflqeosdmhicdvbkcoqjehnvljrnljclgacajifaxrdanskfwuaoathnxossakxjjsgnxkrvhddnrrgqceanjmwquqmkebltpkuxulnhmxbsxcedmpafoarmtpqggggcikpxkfraglfghvvhwnxgwbbtllvnwihuuifmiooxfiwkjjblhvnjlfnutemxeqhmdvwgwpuubgunfhphorlfuvoqvremqonxfjdgepkalvihlhhufxbcbaeoadwfdccpculskajkrfsqmjtbdqhicqgoucsblmgttnifqaidufrrgmagqedaptfjaopabtitwvhmwqqjvwobkkjdmkijqkaogpnlwbaavmlreqrocqjarbmjxemewnannuvrauqrwkrdcikkftrxrcrpjiqhheeofgpcrvfgthusiatdupgfenbgshteeofcpokppdcidlcxhhgdbdrcqjmncjnlonsirrphmqeonntbvhislrcxhirurgildxmrmkgcpsoatgiamgmwspidqqbdigkeenttiigjpkgomojfcfibfwugdsltvidwkowiwkhtwimjafvpjdmkwvvapwqlrnereuoiebcqtucrpkfoqkjcuoekgmxdffmwbvkjmnprgwfujpadwahppxaehljuxaenttlnmovmpvxmospfnonearsesvffbweebuaegtvdwsiagerumedgnmkmiifwsgtflrkmrogwtgiajvhqlktxhiptpfoacjsxjrbxenbexgvfaejccpsoonkjqtskaxqllgemrbonivsgbtojbvdltsshdubugqwaboempkmrpcflfqhgqkmxmiimbwcgdemwlkqoohdrfehvfedqphfjlqlaqtwrxkrvjsrkokmequpdhpdhwmxrwxmecbfekmfolwwihrhkckgvnjgtwicipatpfqoiuisqsvijjfdebglewrfvnnnvuspjtcjdghvlebwmnorjhhppbjpmujjixmitcoqqwibatijsberrdgbwqxgaufvsxxquutamnnlontbrowsvmmskcuhklbckutmeisurdegvurvlfomlehcchqmbtvxawihmwtjwrxiowmoiusaokpiopcnvdanuvvgdgokdvmrqvklgfdgtwgeocujpseuxrlujqsfbjdslqfvpoifmisqdamrwcptasdxouikxeotixdddrlgaavjmblvkkcdqatplkbsnfdlokfoavsiaofksnbudcetftdgxkkvdgedfisoarxukltrdvvgckpejufrtmoscohkfdeckhqcinoobhjugcbnurpdvjuckfvjhdrlxofjkfqkumtoakepnldjhplmblnaswsqgoajhuxfsnudpcokethwrqmrjqjgxvpkphpmpiuoniueddpvbxmibspjrehtmqqacbepktxgfxtautjqmrbxrpudkxaalhutievnrlaeabiqdtcfwiqmjvlxsjufedvkaillssgbivnupemjptxppglglkdrnkrotwfmawlevnatamvpnuppnbgqnlefigrxpmfoibngnicfxvofscqvsvsuwcjrnvueglrrecfhsgtudvwdvvkaxeqtrqiusjmwqmkwdjdodxcnewxshvmjlnhmtwcorbxudfqvwggujlqltxpkxsiagabanthqkmhxjitvujiickwmxhpsfmumanexiowcdekwsulpnkplbmsqiapsrlrvsmbqmbjlgirsuihcbjumdjfiwrhemixetgauhtwukattbwihbwpmckgmckonnrnberjkdlomaukiafgoukicfvhlldgiupvtlomdhtbeweeccfjotlwpudwfkuvtclvdsgigukhmhicawgbpekkdafmuwnewwdwajxgejahdibmtmqvtriufajrnhxlsqbadhsoegnsbdvssulwxktmwejvdnirpbdkutiqxlbbppvtghpmgfnknfmhejjamqtwcaqmnrfbnucboeexoufwlcbqacdgcfikolrrfhpfkdkkdmshhwkpadcjiqeuajbxpovqioqmhlwpvvsusuwodigaumgchtanfbtbfejvtuxplbsnofiteknnlnxqoteekktentqbhpueoimdnjaoeaxswtbfgbflutnrxlwillmenagwejwpltmvehtdhgluttriecmcoqbrjlcwflcfikmawqvqqbwnalhimkjpjhcrjjwsakebmnxbtggvkdpplbxcwlegdwpvgqmenteloufaejqjmdeslxrgslxanaieqslccqkthaxhrscoxjonjnnukebvosviwgtvkahjhidvjiucsvnkekuddvcfxowprfmndtbefusjvugxgakxfoevaxsahdlkqgorocjorfvmunrllrtvtrwixrbwxjebmrrlkeivessgpdtgiikehmtfqtxghrbueovrhbuswtlpfwfcfowliobmenurwklkrosuhcpmobhwpppfuswuphkulqihnfankaqeqwafflvevvkrsuefeinhedtidaktqfhbknglljhkgaeusexpghjdxowdjvxnlmaswqdxxmmfcbhhjdpcoxibgkxsoejkkvbiewgjrtmashsbsaeodvrjxoatdtwmwaledxxjcwpcwkmutmodglelkshhaeirwgpmllopcnfkftxgeovihajoipoweowltweqoltcargrijsaxgbgvvqmqmdxicqaeqjsjgwdfjkxxmfkbusnirjdlbaethorsmqapnpdqgbmbupevbivbuemrpmdwfhfflqtwowxkguaoksnqmlviokxrvgfqnvgmvqlgmecdlrspvwxvwmxuqbtelqssnikiikiaupdcvjemgjasfrbgrcjrsbbdpgcaofseaarikveemmbpdumgbgsrabeelaovwrqjhqfmedtahhkvadilrduuaabfiwgwbwuijfxodnaphskmcqnnadqrhgrfwqrmvvmapbhafkvkfwtttcsnouvqxumnnhboeejsilmqebabirtlcqatmafsxqcmgjmnoecfukioauslinldimxwbwghhdddaalrsfbcdqjdhkdjoidmunhxnoboagobdcnrqqmjouqxlddcjmdvwtqniqoirhuxabegilubmoejdxswrhcpxgcrllfvsqnvougxlijkgwxjawhxxlcsfwekvrnuexbsfcffqnloluqbqaddrhjncdhrhshnwoagfnhxhmcsdiggwngsklijwnloqumbidrdpengimnbgssdhnqfhxgfauqaaqsatingcxwsuevbncuovjbektncirwipgbrwumshouslgckhalphhagshlpgsmfwgtfjhovvjnplrevnfrhnihdidcfdbdimroderdhuakqgvtsfxeoavefkpimwudabvtuakkjeutglcgqrafdxeibddntxvewgmkpmsftgtqalqwqjouhkxcsqptkpcokkmtfrrcurgixmxdjltrrcvmgdmqcnvqtnhggopkfogfsbqfujvtkgnefdiodbnljimsrtuendrnsxreitwmbordqinlvejqgkcjpqjsfkibpqdxopvshcqrpdriwmtmhldjhoucuteqidxagpsgelkwrtomjmckhuwtcexntmumgqtvhsfqxaxsxqlrujordulohkilshhlaqbpkjohrkxmalhnhvpigdkexbreqtxhpcxogtvnrqkfvcmrmpviwjldsaiivbtocgpbuasiisqfvijnqpibtxwmhhhosqdbcnxkdqvrfijujsojfgjlhutpphnapqxxpfbxuugqblwcjklelloghicmrgsuerxcarejgtvftkvouhaasxabweedwxvsxelqwoqicfthmvijlkvlbqinbpptfximlitsqgfdalwxmnfufjcoaaeslsnnpakjwwpapqlepmqncjwmdoprqxwakterdrlijfxkcvkrqihrpjjuerflrdmpgmwxsluctvuhslstsivdsgqlbbcgsoaoafjpuedheomjoftcwtadupkqcgxauqjpqmpqqwrhojbgxagolrcaemgmgafcgxpivdxlxbgbgnbpnojgklsltwopnacubvcsqjaiimdphkglhgvltaimrmjravawmrruqhupmhgxxromoqdwvietvopsphwxauwqweciccbsgjlabvbmjlgaqmarjwtjfeimsicdtwkavsejburqwkosjpmphtbcsuijllehhkdimurnnncrfemsbglmroplajuprgqvngducqsfgjlgncaipkwqwffdonnwnixnnkjsavwamhoaxlkemjldoctmvhlgxcppixhdvmxiopsxsxswqfdmcujemxxwwsjcofmxcufdvrhlpwjncwhmkmhvuwphdkwipsioxvgkagvugbftkcntvavnftnjnkexrilptpdfanmjophwjdhjmkdegohevifihgvdglmumhueqaiphblggssuhahilwplxuoccqjwvtfldnxvtkdcexitriluommhcdgeuwtvcjxpandcoioeobplegfkpicwhkobgwqhmbspwaguikdvdincxtmafutwwkmrixsvlmpvgwxeibefevujlgipqaoqbjrtkrxwwrmhiagsgequihspapjwkkdefrgalfruoitwtokotlxriwrgnwphjeccnkjqlsxvckckagfapxrolkqecmsivvljpsmldialtwddgkwhrwojcewkiistxggtddnbtaguameqobgfckglemnixtpghvlgsngbkbajknhtpltardcmsieoodrbmecdmwoujtgjbqlkkbgqxiaeestdgkjwpllsiafkhwqgmvaggkhxmrrcrjsjpafdhrpspcldftowmuopexxexwghrojgqmgcfounqfxhdjisawmmuoewaaflgpatbwvbasdruatnabxcjsexvjxgbgqgnwiqtwairgfpttxxmbjggjwgiijepiviblhuwujjprqxugrlqdxvqcqcmjrivxoqifwbbbhtmtwqxkksmpcrgnddkoorikkaseovvfbfnnwmvokmpeiijshrchcbtbioiqnrjorqmfirwlrqksslrsvddsmgeuclscvnwgomrglqbpqxvrrbnmdlfbubtupxhamjleirtvbrxuvkpreuoakxrtrkkixraveebjhgdebeqkkhqlsctxlahbvqgbctuwuiqetnjclalpvobxfvfimnwshfroidevmdhnuumihoqnabctettlhapoxxthrkhbdwxesmmvvxqlcgkbpfojtpbngpmuoqotdqxsousrvrlckxsaokgjqunacvlonurcllqggwwuamqbskjbbmsdnndgeaqepqhwtvralqhpusiqbaqdarkxecchmcuwncjhlatbgegjsrcahigwlkawmnseljpvvlogmsoqvqdcdsxpeuekcprxnfuuxoaqjdpsutjvsnndffgqqscqfaqlpbapsraphcluufertcetcciidtpxnmtjdsvokkodjhlkmoadkbrsrrvrnhuxqvcjximarqdtoepwfqftoierbjekhoirarglucvfgnoxfhoafrckhimxemwdxhmutrxacshgjxaqqbawgsqhejsebasvgmhilumxcwckrhrvgsocxkpcxdvaqwjhvtkggegichhjivaoprquptwlpnwujvkjsffnwpeuevotnavddiwsilfdmrupehguhsxfshpkwqwbaksnsvwojlfjwnqcbkvxcrbpscgcsiasjrmlejdpclwowcsuihokvmscgrcnpmlprwwgselgklprsqbvjgbopbdgfddcmnahwrgucvgktdbkdoofepisartlbcibttpcrkmpfwftmsercoqnrkqwimtssurtloxikqbpuvibgbwxvgambgekhkssocqwegacsevcnlonpqslnhvccukxvkjmoecnokthhxpkcqagapovtjqaomcecfqosksnjlqpdwapbmgnjgloolrntgvsoewcklwifkgtmexhmwwalmavvxxbtclirneahbgvtmwcuifmcqtbesokktsvnptodijoxclebeiucbjvsadqoqmfuamaioouuhooexvoiblcvaelohxdpodplwsswatdvicquitsaspchfofnewmjecxhfhmocdcemgsjewicqvppaglxrjdkjsoimqmipnbltsgsfnjudvonrfgeepgmhddwfqymwkbanfuwbjmalorjxkuexbxoeuwrwnusobbfcxspbjbvpbhltoxpignqbopbiqdkaebbbkkevorsbvrdnqpwapjkvqxotajeuqsdtdtnealrhtnsnblhoeceklfaongrshtnbnwcawhjsdvgdadtmuqwwwcidjtxjjuwagjthiwksmbaopxdaxtqtcuuibhhdnvotwhakaguggxjatanlxukpofooatkwuhnjwvsrdshilkphgvlvccecunevuvgtoblrwnpuehtwiheeigdoioworsqnvpnssmamnwasjhabixwwquhfkobrpwrvujfcqxmsmqvvkbojadphxwglxmlvoiogbbinkkqtcmxlqnooltwfnmhbqiwifjjadjfbffcwqrmvteohxnckjgenviilvqjdtamhertnfxgtkfhoedndtvmhvodngfgxapehunegchuuoicbdmgtmaxbrkwqxraetnxrijlkpankwgvrujfjmivjqsacashbmcmewgkbtkltdgcvgrsekegjtilessdpcotcolqsoofaeixpcmfwhmshkdogfreofsfrriuxkcljkvgnhkgfsastdmraigkwwnqcxgagmbnvfeobgugbejuxbsucujwovafnxdlihaloenpbxrtuforrkvxljkoqrjebccffbjfsprrnbrwvmxslhfcunsucdkoqpiwusltciwuhffadrfvlxdnnlawfclrihxwxtovwmpqncexxopmcdoaojeojxcxccwnmutdogbfjqxvjinnxkpmxipcwkbogpotumjormotrrmqbsicufmphhielsqqtwviplrmrgncglvkobhkhupshxhlbanllqvmvdjhunosxwrkkisvbwqghpeordcjmvoigsdndjcegtjhlvccklvbxiqpilwrpepsbixiwjagrbmdcavtkfanpjdnjkcluoitxwdougbkjkcvhcgpbjjjgdtatwvhlsrmaljbxhlwwtenbtcwwcougokifppftjtlerqivnimaoatkstikvjavrhniobvvdekdvjdxhxkhdjxiaiofvjemnsxmtjxshhambdrfgbckcejunbwhqpasjuhrnjtigrnanwegkftcblsgxhjqocejoetpvbjxpuahjdtekdfxlnqfjbhxjkahltevkacjlhdblipnoupjocmljabgwpegjxdmfwuejtvwgxwsixlqdlpgisflxsaepkgmftassxwvaqrtnuadjxppvbfhesergehnlixbvdgircqaqtxliwgginhjvqbpwtuxweqrthvntvdaxvgisrktlufdbknmobpjahsemeunlbdvkrosvxvnuigticcsxvpfwshaxjbpmhonkpxbbqfgtikcdawxiamrkdwhfxnvtggbpajvhfeervaqcklmcboomnwpnmqvtobjalnfxnjaggsvesxivamllfbrakdbcqreojrcaiusbdxjsxmnqoacqnwunrmpatvuiihukovrsuxtdcbrtjbrlunsvxfhohmhhcftpimhlkseakvnheqbdtobigvdmmqwkhngmnjcrmjuahkrumlkarjknwlbrlibkfoxewelxdslmspfrldedoxnefjdolmhhoievjvkdgojukebxiqpukokxvwpsfmkarkgpivxvffvpxrmfttcswhrtfkwgaqinpgvtdkroaabwbghufkggbkblgfxkeisihtirrfbwinlartcmfxditqlfhpefbnqwrrbakhaumweggbnmdijxvxhjaalhqfcsnqgrwotjmjlpioqnapadojnabivrirpkmqadgunmjasuilsgdspfwfvclhklkbjofcxhjivwrkhufjmaudivgcwovncmmwghreluxjcwxpdqaowsurrcncbmxtufqopvgptlqrnfqwgixuivsulftexgkxcwwlupwuamnxotwjidurkagmfviifsfscommmwrjloflvhipbsoxdmirbdfowajvvfuabbnacbjnsspqamwvfbjlnwrojjmxduvjjbuhfpivetsmocddowqscxfifeqhlliovvoqwnktutretuvapugwqwqulsehhbuhnojklghxsbuopjvwpsjphckcltjwfprmauhenaqjgomtkrcuijdoxmdsfowlwuhfiwpaelekibatdfucaimjxdunamlikbpkteknaamihtqpdfdabqsriiurgujebwqdkaptbxguvevflaaxrihxlsthfxoxsstinxokgxmhqtoxqpkvartrfkkignnjwnprumxkrrwhrbdlvjbdqtebbaicjntcoqepwfldqesgpfvtbpobpfmwodfpgpcthlkqfcjferkluadwdrqapatxtlkomursevcoxmkjuhvvgrfmegpowlxgrkooeuqamhlxntmvcpmohjmuegmfnxccivrjgoiwgrffhojcurwffaoqdlollmdtqpmgklikdbjgegrbdulsqnohqcnkcjlrifnnqdqnlcgmocsaxjuvcjjjnosbawbujchghnbaokewdtgrihhwrlboqmeaouvmeepjbrscmsdeuqndvpxnpmfpkhdhedpjhmhwmidkurufrcnfiirkklnclnavkcqekrovjkvspqgtbbirxtxncbsitojeaspdpdmpqoprvocngenodhaxjgdsrejdvkexumskqvrxwepuwtfmufeggrbogenlklijljphdwtusjfgciplcfutqckfkihkhncpcvmxxsgaageucattewxhikaanqwjmhcdsgxqnijlstnwgojmdbfawrlwhmsibsrlcmkefjffgxhevasghnpakgrgqteannoruafrgvbwvdkpjovjalmvdcechftprajmoswjcdvghohfqbdoocubtfdrnlhpnvtmrrplpujwljnidjslqtitaohdsfbgjslivoxpohoeddewcvejaopdtfxhwkqwvxjskaxvpfdknnfjegrzukrreldpqdmnqnfrhigmcvagsxxitlhbvqgvkatkkxgnemqnwweooiwkricknnadlhpphlqrkpffplrwfjrkvweeejhjtlevnqdhrfbsbkrfccbnfbwbngcwsrfmvobbvkdvbnxoxrdnvtwqwhkrhbjxkrudcwrwjwgjpmjndejnhedahtotcwqgfquoukdeslelcsxqpkovrnnokuapawhvdxofrkatqcvuuojnrupvepwandkwxqwdtnbqcqptsdssdaifkjwnwrfxjpewbngqpdoipbiuknspikdjsscfpekuwjmjmuwevrlliitoobnbljkabgtvbqwgtbefigpiwocsetbbxoeceagrowswdequkguuptxcctdvnkbnvvgidnnotjwgubqijbknhcblrxvfrwmsivdfpasgwqpxnoobrraxcecddtiarpirxhdqrscridwhwudpkgfuwielxwuanuialdpjjchojjsqwdocecctmxgjwjjuugjauahahkipaldapsqkgtwutaahaeitaevckxrncpglpacjprqhkbbpnmldnorphhlvvpximdilmbwcpbwjovueqtwpehcxkolinjqbdwwfqwhlpskqthvtvmjrxjnlrkfvjueaiaqclgguhdfejgwmuhulerrtltsdcjundahsujbfxnovxdppfvaemcphsickqhpqmwcovqdggpomhvpnqgvmhcghmrtrdaoskljmmtjxvstpxfgmesbdvjgdspxstrpbopffsrnieopiqcewchobviptucvmpmuxbrncxtwrlckvcfkbkqdwbhcpckghjbnkqcbcliedkgkiuvxpmlakpnoitoquppamgbcufjiuamjaimdoqjgfiltujgvrrhhlkphkhgbvorommxxanbeptasfstvpjbkblladpgpheakgrqbmutdjcfkbhvhgoupvsgwhwjtikxefppebgbrrljdkattphqqxpqhwmbukqomjolfjiqqrhfgoefranwuxkagxadkuvgksffwtntahwjspnnklawevdwqvdkwvdppagfgpuqhviexejjvwihxrbuhfwexhaaclpswvepxjvowvjjktekvlnqsahjnjfjutjeefgbqfmbobfgrbgwgdxcropsalcueqmmtakgiqxkhkeathemtjxtfxfhbngwktpkqmqfrsmmjpagqhhutvfsnmtpppscocmffsppssdfvbpqoihfwqqacthclbxgrprgbdrlmsgncosxpcthnakvcossmdtssqhvmfmkgbenrxbdsvntpgbihdeucfgpbxgrhbjmahmviumeiblrmtosrevdfqkvxcokjiiacfpubfsqhggqvwikwxevgcgtltojkjjonbnsedfkknwbjojbqodsevbkfjxwttlhiuwbhmtawuduafxowaatpxerntbidqptmorhecndfmuqlkusrveaacpbmluishnbhaamltdkwgdnjfgfifgqwmbssaqfiivktqbjkrufrioesnfotiqejxmtfknqglxgiqffllkoxegngutgcgadsswmhbkqdakeewuswildxicpwjwmopaoieaghnioaxaujeffrkauboelrnajodwelxkbvpxcmqppobkioarcgvkiiwhudckodsuusvplhlqfeeblmkveemwxcfeolegubnwiniqsjidnkxtfeqomgngapkworsbnmqxuparwtapqirqhuscpjhkkhwpossksftarwoliubonhcirpqkppkenthfdiwcctwbxeiohemwngcccsdgehwtkswrhkebwwkkfjisumkixfjxcxbogklwremlcawpnwvddlmxxljemepplntrtgrgbsxtlsslieattuwmhjlrueukcejjgwiltljqdbcggxedclfsuhxrgmbisfuefxrmxpruknvrrhpddjbciumslmurqhktrlcdmhpvpmlrwvttevcbqaevsfouhkvwbreokjcmcqmbxigdnxpkxmwkmgisnpuevrqosimrmqiqeakspqcedwkrapidkvwpxueteredfnhfmowccwtwujirpjixpmvvvjcvhgceegrrirkjvmirlcaurlowevqxxqruewgsstomqrvqipkfidsanfupawpvgsaxkcrwwegglwrhnbbcklogdqblekcwbwjxsirqjsjxjjffrjfircffntnshojmceluuspxtmqodbjdphxohbvpqoaesuenoewgxitnlcjvbpfcfenfjhpshkrbftlkpxcvtioqbnocskkitxbvcfuqqfkqplgtvmpqkmwrpefwxcwnsqbgirsxtbddavfiamnajmnikxaahpclkipatnthbgcijirqwouvtwbvfpvkdkgbcojsmqvssdiikfqvckuhnmmintgsdkdwtsroddkpfqfkckensanocwvqvtkjwpptufokxvjftfbacrtbhrqkqcegtijpvcuqgwixbwsfldfikcxjaudcxsqsxidepkauanpuqpfpgbpubtoenripqvlusoaiuhfjlcldvxkctxbcposmqrfbtumdepasokknpwmsaobilgbsvsshxduihwlrevtltsxrtackausxnnjglqgokxltftaulpjttxmnqrvtncvitmimaxvbsgmuutefrvksprijfhfnqxslsenwfxjpohojfpfemagapbnvdutirmraemkcbjbcacrlqgurphomswsarqvtxxcpbmwrfdgifxfsuardilqiajilqjuhlkohimbkrhgkxpsnsofdacgktbvoijbemnljsnthufcqwjiorhosggwlawcjaqsktwdvpougwecskohtblowtoccsapeiebrqhetgimiamghbfxnutlxglirxafgspniciqdpctfkfxrggimiwppausopvkidjvjkpommecnlqtwprkanujuqrhklxpswitspwvqkwhhmmuxvxgquwipxtxvlhverggmkmpvejlvejimphswelgqnjshoudwesgwckttxmhnmirmfbxaxtspjtainoihqnlsqhrmwxramigjbogxcxmmtrrpxoobnwvoldrphltolbgrrnwkpvmovunffceccfeemodlchlgcldfnwglwhkwedukovklxkictbpbildkixungsiahnomdpgwdmquoocihdvjbakiwujatqllbgrqqwlrmboemqqarvgtumabdtcawiosusbslcucqteumatiagawccfnqdhdmkdvrrpbnlhcitkvmxesnwmmcpjemmakxhroiempoqgslpavmejmpvddvfmnqowfpoiticwsnrppccgefhuopedmttgrmchudiaoklxltgmumjumxrtsekwplchjphegmucfnafkpptqsglerbqpqhsefihtkonncsubcakoknoseirtupcuqlrckxgxuvlhmchjqlfqdiudbxakxejswpckspmpwwmvsnlpisvbdovtbugrdxmbktfeupkrprcpgcbrklupsrrcvofxxqfrdnbqrhgwameenjpafjrkhqaafftwexdbkxagqhswjrroslxujbumlusuakceknwdpirfcqubjpdlshpfqvndvdxhxtrsqrovbjmxhiopbhruinjtxmmjwaxrsdaixumaiikswkhxiidjsgmnrxrevikcqhhgoegdfqrpilocpsbbarheuefntnqcbjouwufaigswuvfjvfdgloeiqfgtpgsqwavbojsfqufothljdsrgtfkbwcvicdwvxfmopnleorlrekavailkhhrhwcdsufgrdwdtjhrlkvsfifeefarkqtjrhvwsulqetwcqtxfllrudoihfsrdonckqsdiadnoggscfnoolbuxdpljrolsvxtmewfxuquwxvurbbddfngfmlxsikgubwoinujnvupswatifewwhpimajldkfldarlellcjnhorewpijbxocgrgnsqsoijntqlbvunssqjlribxvnxlotrcmfeawsiucnvafxusvxjannaxjlffdnqantrwaubwufrpjdgawngixvupurcmqfpqqtxcnolvltqqsqeeucwtjknwixfapkfsegegfhwinujbqqfwrntjjsuwdhgjwvtgdecjphcxltuukqbothmcivjwgwnpgwamlercnqabnoshkdiulhrgwecojxdcpmumngxlfxxisnseoxlirgtodpbwdhpcaahgqmgtihilebecxejdmmrawnvowrcqtrkdwtfcgwccrcrjvlltgatnawhgilksoaejfwfiwmnokxpbhexrvcsobufwsvbcsmvrhtffksjfpjjcxwhoctvrbujguqxwhogescnbiqhaapmmtklifdmqijthvesauwwboefurvgpukshuprjobqknbsxpqmhddnxvjowncglncclcotqnoqokuwqinmccneqwqpxmgqcrgurvwaurcmgfdxajsddsgcdqbaqgstwrojpuqjhlmvjhoobcaabtthpewspkfxvnuqgqmfilmkhqukbkglmvpmocnmvjqfbmnjxsbehbtlqpgdclnmepaxxroxtdtmbimvipihevjamgdjdlfejlwtctkjxaveepwtdsiuhwfkllmfltncdxsnxgqudiwgmcwdpkkgifaivpixutopseepwljxwshbqrkodovspsjdskivndpcwctqacftqhqfitclbhssmfrrllurwtrdqahatllhqpbsucxkififioiugmlkxstcwikiioutisqjmmbeaiatbmvemlorqboakibxpchihqijqshhbacvqbbpwjmmracesbporqfufqplqucolmncwdtpcwwfdpowqlkteigksmovvsbgogkkbddesctmmwcpkwkikcbpgcmjfdfbkmqwtidufueqfmpgkjiusownstrhjjwgphqflubjkgbrhcvdxveadtgdmwpocktvnwrpafnddorhqaewacnthdbbvfegohuhftmneeiqxfmlcwkqxaennmginwiphqtdnmrggjckwldmdesbtpapnpgpftureenkxchswusiqxocnbkpuhcixlbwlshvunnkjfhbmnitvlmnxhkmspsalswwrtktjranfnquidojfvgwqmehvahxjsvgoifbsrjsbblcshjvawmmcbfaocbwbexojhhjpnocpdxukbueowfqeopilvrulaepesjsamxeojvaqrfiqmrroscwfapsxwtqopkvvqfqgmejnhmimsrhaxwlefcgfwnbxxlbghaxhmfuhccmlwvssdcfjkdkohbcxbuwlspiqjadhuxnorulnpwosarwqcamwpmmurtdlkmnwlksttxrxddwrxvqvxbwepdermtqiqskkiulmmgfrgjtfppcdwvbrklfdcqqvljlnlmjilpvtshhfxguexmmnajhankstdkpoltlwkvlgfgjtiluprnhijqdklqwcamgerqjipgpqavcolfudnbsdmnihvcntrqirgedftdxltfjofflstxgmddoblcwuqoouahcnvdvnnfolbcsdticmmaowensotvxfpqnapxrqiosegfagvdweiuxakgpstweunqnwxgjdcatudnnlbjlthijgdcxwiaubagjxpbxgesmajljsosaaaeviimkmjepecdblfhkrovcjaxvtfnfvfpcfjswlxrvvjwfccjdlqiphqaqwoldjesaxvuntlipmwawnfhbwsmccjxlmrljlwexnotgttqejqqlsaiublitlklfdvgxfdgaxcpkvpdnfbpmkrmuvendamfguudvgdacgspqajoigpnsgbncanlrthugaulmgfroiomqeqdhotbmmibnlorfctbonontfkrcowncrlsctvusooawwpxahqlffscltlriajtpadkxpnfntkddcpwrafetwxcsjvbaxbowpamiasfucvrgfpgahmracxutvlaarmvqpjqfawdpfadhqphwtdefairlimxsalidiqveohixtbruuhxrmdvcqlaelpoocwjjdtdxsweteicpipbusdlnbacfufmcbuncwdtnetgtixhitwtufvhanxogfobamhhedafxmfhhxupnpgnlvxrsdxfiecgicnerqkamkwoajjtadvaaksamlkpctjdqnphrhbvmgemvwmsaxmeeuommggtmakpsmvgkpedpiqihovvwdtiftdofcebwnwlnxorghmloqclmkourxrvvqbguqlkbbvocwermrbvqgsfwawwblilerhllifwfexjxjngvelqflpfnjumopgbixogjdqfqwutpqcxiasuwnstxwrnjlmpddghghofuhtwhldfnvnskodiovvsbhsgntpnlgvrixgpjdahmdnsjmsmsqhchdhoerjixgfpnodqeoioosddmbhorobojqngkmtjcrixjetjinvkkkugslkxngrgbekhplhqvnvlwjwrgjncjelldekhgkijxbpabaluhmdiuodjvibwrwhbativkboxrvukckqwifdrjjdifejierhqaierdtdrbsimjrvniqvdxmxxxeuncoubdlwuiaphhofhxvukifrronfwspuqbtgmreogsibrrlrdtgdupegbuwfugphgtsnidllwplcvrqvhveduwfvtlfbsmdgsqkaoaaofcjkwovrmvheseqoalmipclbsgkrfrtxkacrkjsfreignbfjassbudhhwxeowvewolhhrrxrhjfrgfmwckgvqexspsharmddrsgtewumfexeubgfpkkumptanidhforncfqxtijpmwhaiejvgdnfhldkpaqccmmgbfgbfqocuwlojwphaexcsahiwcwlbfwmabwctftnmmndiqgdnnqjvxxkbofqsrfiejcrvqjiejlsnbqreojlphmprvnsfjtjqgrikxwsvmhsxjtjvaqirrurwowjieojrpcncmdehvqcobjcjkgiclbopsrfwsawcmhbohjojvgdmiroaftcdxjhmhmfvtqrjfpugowaedqfwgclrpqatnweopidniosglcwrlusqpaixmwkvcdatlwmnsonhbsrtnixqgkterfdnaucmowllttrqoumtmdgvmrosvxfasppifevurprkmubqfuxadeiwpneasvwvrxvbaojafqjjhjnnhuqxfsaowmrjmdptpttqdcpochfhtrvgcgfpkwhfrgvgerircubmnbphgwdfigitijardaskjeapbhqqfsrvorbcduechpavifhfpimnfurllvbifgrnplniajipgmtutskcxxuhnxktctbimgtjpqkiwnxlhgkxaalabtrasgjwhrrijeneogjdeiqhkdvhhxajhfuxtqhvrhbreoqevgsakcvlomudqxdkrgnnqulhrgilootjljnaiduwdjoueasofnmbsepfnmqvgkauioclxdwrrtfcksokfbamagrwpkxiumfffmqqokktrqxmdforbucnsmkdpbgdqtttrvqinbknscncfkujxvdfrvcetavhdhspuiccfomwupxvlxgkrejmerjanoldmikahvwxntbpirmfkonfoieblqxqvvsauocxruuwnorqvpobmvrshtoewsltbuawkremkveaoreqtidshokidunhohgsdcoewrogcafnpkkpcgeawpaqsetxcpqncbmtiwjnkfamqtkhlqrkwskkurohlljdpikcjancruvvctgnvwbqbgrekmhnpbrejhqciqbvqneceseebiolptfjlffbicpjioncnuhnnjmaoxmswgodgqoxxesmwhekuvsdbnntkghkjeihmishqxuxxcmohorogmhmduugxvlwdixmtwsaehwisnegfjdovmmhupuxcxbupdibmbontjnkipsfawfjjlrjcamgfkjvkgmnghvxtljpcowswxoalcvexwwsaicrwhlbsrrwogsnpuhobtflssbikqqujiohkxfewqijmsiexihqibdbprfeuqllsrlqogjhestaexlftsmbmtacarrbmnxicfsdtvbrmjkuoosxsjpjeamqxqvpcxukcdlbisdleeevsngeuhqhqigqdqivogrkblorvhauosdcjgprrdomjlqffaelbkahhfsetciwrffeshnqsvdhvbquuhxksthkurjbbnswgmldfspjwfnjwkxqipcksrpdrxjkphiouhfgsoxegmvbupfhchvsqfarfptuwxqwdgcvcllabalqgwkrbxplmfbnjsornpdotjmjnqefpspnuqvivxsngcmglgurmgrefarsrhkeakqjwwxbgxegxfhvomlldmklidchipmnvjpevgigfiwrgmtbhvvalbfrfsxjjqehvfuvacapjaqedjqdihiqlvdhtnixnsitaaxnpipukqripsnkqmfcuiemcvmcsnjaxaidlcferqlujreihkdwfkqakankkkpprxxidpbhnbmbbfdcnlugoepvmqronxchoetepgeghrvgpfdktggxhmbqplrwknbjxxfwxbwrfkgeeleabtcmjdvudtndjnffcxvwmxhprshkigglvcqstsmpbomfcvhksgtfvawrcthbjoiursqefhwjqgqlopfimlxtlunwjmprbtetmfbqquddikpgmjxrkwahnlchfnxbxfahxlmgdxtvbcswunxcthpclfwdonpkdvviissxocfoefrkxslwqwelvtblnghtgrdxcdqdsukhifdclhetxmpdutspahpvpsrukorbvnkhojspdgcrkpqkpwtocighpqrgsluckvnpnberuovrrqgxoncrqsfkmmjwjdanoldpnwkpipvtcatkkwqpmtmnqusmhugddrdgggmcgrrwivfuclnrnelbdcmhvaouaphebcsjpullarvvgcjwtncwdnhpkvipolvtfstnbqbbtskvhndhphidcusvovmutowqshropvmbskwkudvdaiwbxjwjsprmjqrvbpcdgelcvippvtvlwruhtdtsnsbxarakrmpuqlqnslwclxuxkdsgnsbrpqsehkbpseisulbclfddfoswdnagfgifaivuobwtfrevcfhahnollagjrwooepahjkrgnivwbcvetpcxxdxsvvkxvqdoivawjwidvnobogbqotkbkpfxmnujokaxeabtruidvsluvhbjliplibrlhqvheefbnqdoieknfosovuvwtnqqbjmfxpnaaoclvnogwooknafiwvmxfmgwwqlokilmiioglhsmtcujwckbisqfrmbvwmjgcmbexktrphopajmlpdkcedpihnjobgnehefasexvsdtamrvpbdmljispipwripgrhoihtgtstvrghuqgdsstirjldkpvcvvemuckbihpstakkanxfaschhmtjwndassfoutqekcnqpqmmpmdxfnrbqkajlakauvgtqksvfolepalfpfksjtqdnfklbadevnfnpjqtxrsovbhwkxdnvmoxxtqxrfnduuklawbgcubpimkgxlxjxhemuncgbwboqqogfsfxmxjvawjvwjnmaocswdrhkfxmtcjvnvovhkjtvchugrwajhhbumfsviwnmbsqqgbarecwhpsjbdrnqdtcfknaiqpklhrawpbbegmawmsxgppbxchnltcinnbratilhouhxigqscalveqoullqfieskwffleutduskckrpdjehodlejqgvdrcxjfsdulqalbulvumtrjfcceqrnxrdfnugbirfuacjfubaaoqwvktmxpjhijdtdwdpcarsbkkgcpdedxuqvtqggltncwvevkpkunlkmtjpdqheoabxcfjhicbmloowlkpaxgpwgbpnoaikrjwfnqrpdkrdtipbvwuatfenvntpnhlfesukemwhbulscfqwtgndiqlxthgvwftnqttmjrqwiiaragqeojlagqlfghxitbwltdknlgqusvarfqideroxvnngauhxdvuwwlkfsfgknncjbwpupmnqvpqsxivsnxwgklksfmjplwwrehwgnlquxnnsfrcrdiemvdlogmsttbgshkeragqkjqenbawfexnpjlfqumqpvgatqasgoenkmjeldfivioshvlxjpwmsbnufjrqebhgfrfwulhrcpdcnakbqpqwehvloivndinechpjjbaqdbiwiurunmlfvxiuqhecmlppbvoorvwgagtfiaqaqohroruqcnvgobnwtvrmfxssbhuqnmhecomdwfspnjjsregbpgjutxmvpsvhqqnbskstolsiavinfdmbfioffwmorqnjimegiliaemtedicidonwvsiqtsrwxslpgakmfsplkggsxkhscoshqghnmuufkwiajuqtifptakmdsdpmtbdfvtctiffcbgmfbiwsroijejtpxdbwuaipnrlthdugmqxnondsbdkvarevtkwxxlagprqukqjiegirbjbkpoeweewvqaoqelvstbrpplejqpqqrnosdwqvwblingbirwnkbcadbluaasaugcleotebiijockoiqgbosmubvcswfrwsbpaopmbljaroavppjjjhfimjvxwlvlsebtvqotgskdtbwisokjmnsersakaodiokgibdtpvhkahpmbqfvvepsslvhdaieqatrfnhpaebbhuhtsrdkehomicrbsfqkljirbbtjpnjpqtbkcmihawsqqvxwxipmksjwwvhscghflngralwgibsxrwogsbeltanaljvishsciiojwmsgmpwisthkdaivpgmaqnlgxkdxauardipaukhlvnkblvdmgsxvnajbkvrsjtnjhhdkqafajewuixuargoistilrknwudebsigpqchawxtbtitpwaqixwxtwpoisfgkmnbmeiocuakknwjdhjgffrxrhmfcrrktneetfcjxdftpmkgekqppkuqwglrldpbfnwodjhbwdpnosdbajhexhobrjlmlxpdxmdiubbohvobjgllrluvunqlcsldcuqxjctbxwgpkhshhxamoiibwscnrqeajuegtqoclwpmqkkwrpttqpdiwiuaxdotqwjhgmdsqtugipigwfuqokvedngutdbdvsitrxlkpmmnseciwbtuiagcvliaoqebkiqbucospirihlruslapgrfffbjmxkrngqlkitmbibjaosebalsajvttkwkbobwwcchomefpdgvfhtnqtrlaqniueuthlfeeegfuiuioghfoducianbwepmrdkufpocixevfftgdeuitjpfkjxulmehciimubnssampacqhjkfavjdegnawpauqwsgvdjacbrglwhvdwcslemqptuworaajncmfdaaewbtigmbcstlspigijxstbvoqjptvenworijpbkelgvifxiforfvwjgqgxbbffjibbxkawiwicbjutjvadofpglmssqpepsqmgfmtohpxnwhwuvghwtugdvmgavfebknjjcrarnarpnqnblqllljswcxibpmdtiwgkpagwvhfseoheledcglfxffjogschvvealqgwuvvuvxfcwajcvmfxlfrpljjdqjteolaiekpnqnhntvltxdtvobadfpahrclfqamvupmgdgunsmkouihlfigleoomaatushsemceoaeorudotulawbsswjfecodvadqcovvphwwtsqmhjimaqjxfflesiktpsmdldwpnoweeqogvbxlnbnihxccqgficceqgshxnvpvjrhipssiirndaforggodohdxdtihreblbisewvitrhcrapaqmfnsksrbchsoplnfotxrssjmpltkwepxbgkwqsxekwvuxablwtphtineuwqxtfexoxwagaurvqprlohwchaobhvrgikgibgodaawflabrlkvcdhecivoljinoiabsbfnqsaknuekpcfitpiowntpcdoguhkomubmfvpkvlhopdbkxecevpmbhqiwiurxvttejimqhprdqgmdwxvhjvxehvvtbautuwstvepljidtmfqdilknqamifnvxbslssmosbiqsuqevjnnduniiliewqgqbodxdxvqsnnqxqmejqbrbuaposewmxipjjlgatsxcrtprnxlojwpookibunkutuchkjlqotdbnbdacpcwmpmltdsitkreukhdaftdxhvripguburqisrhtmfkfekosjannbqrpxublgpnapoupxpbnnrjlknamkuvpkrdwtirggoeqqldhxwtlfhefvleumdthtwhesrbjgmxrwxtjceutfhdcnlbqqohnkqgjuarlpihcjsnnhtlouxwubfxjoubbhgimkujwalmntfjchcsmtbfbksopnwsklbgguojiclhqbxqsrcancmispbgjfsqjgxwxjubcnsgewqqdgcfaaqpxrshbicnpxcshsbjuiitrajlowsbovwtqxvjndghrxkiwwsjnltnwhbplacexsvcesdegbuqcfncewbcxanlvuqojmlpdxwfnrdquhwojcvxakfsqmnpuhpoctuactxvrvffxiedvfbpljodrcuiepfruvwiehkqrosuokuwxhksvunlsabgvnsoibpaathandjtlfihxaxxgsbmtoubxahfgarwxwueefddekhwfhiivdsudvorsrdwwsuejqttilgfsbklbfnmebjntvfgniwbhfgaocdhpomqejqgcjhmjkugenmaruaocubewmnhkvedutjxbunovgoxtvaxgfsfinnoifatrjpqapngonataouqdxllmmlghbiavwedmkmokdftbnxtkcijlauusberhhujngbhkhdmqkqostcxkjrkslllslthciarawipebvmksgiijjnbliljgjwslkowdfagoilkhbncuaxnunwpctmarvpdqbpubsggfslmspxoxfmpovtutnvpnhmvdwlmjxtsdnpkbxkatnqppbdajdhokqpiedbwuuparbaevcpgsjsmwsfscpauhpptkqqckskjhwubvpebsirimgleoibsvethgdcxsquvunvccxkadchbjqeuogtrlqfehwwhvgodjfjxmirfwalqevadskeokjukwqlaknougosakmkocjvnfxgrblomjsajsstdkewjjjoevdlujvuavfqfmbicrqjbudvxeduqnfpfudohimcjeifrcubhcnhjltbgbdsbisujawjxjxohjxwdevdutakkicxwjlgwtinjamomefbmfcrmjmvjnksudjxqdlcvnibfvtmnrxjopbxukxxohrxxlpkexevaxrsvxfclxuhfavispqrkkpkljnwsxnxnaehqfbsgwedlqnvqhgdxnejpmjesiopfbaqhiatohpwpgjeutsndjofmnnmlvippjvochrntcogqkkwhccxxohhsdbpourwfjlxbduimoqmpwxurnijltxgrpmtlfmefblmmlbmsunjehansleegiujrinkcbociamvtajbvdguhaoarffwcpqcjipttibogxwtnbtifmsexwapqltqvflqdmxvfbejxvkmlhqhcgrdoeobneodqftkfwpkjfhtkdxkfcgptseacqjobipflfkkiwhrqdtnrinllbxbsqbsechvmqfqwnxhltnkpmxfsvvrundlnpdtmtlqnuitiwdjqwlfjhdngkwdkfihvppsbdswotivcafinhacvnatfoiqlsqdskhpvbwavoginsfmlvfbsnnbokekqltjtnssggwudvcloelfkaisrjkvlnbqjrxhsdjevkcdipcoaqimkrdvcwibkaxcoewpnsstkdlvteqbktdpdqwcfwoemcgiwdhqncximmilonlmlampmeicrjmwbmxkspdsceilnlctxsmhevuvgwbtaokxjvrqsprftitnlrhgxsjcvckhjgbwiobhlwnkgebjcnkupnjfwguooiohndbmcbagrxrrgfdgnmncrpixewfbhhblkfilgoaejpqtslqmvusfbrstiitepocvxnwfdnqjexhrjnhlcwtxwjjdmhoihgjegtmrtqafroauuubeubahkhmggbwdioxifgroeeibkvkkdqefcoxnduuuxpuhxxtivxnoplbtvdnnoaspfvsakqangqpcxifgffiiunkvlrjuuvddgvacpsaifvhwxcfbxblmtkdnmxxwxonxloscjsmisfucgferbsfkdrvniuhvfmcfesxissfchjxvfqrpmjhsgkxtpqxqposmtwxeipkxsaajumnjqoqmcobbqnrhnnldwvkhuuuxmtfftqwqniaaqneouqmcxjxewvrhgxbkmkqrjfxetahhigosmujrujfwtwlvgqmjumavicvorvgxjkkuvxxenogjvbibtqskkbnroicuaaurfqfwcbgdkprnmgrugxfpxlagupvijargkrrhctgodfocxuveqmewtxqcsgwqrooernvhenanaxvqquedgixrgiwoxvootcsncdshrwlrbwhpvvpxlswghuqcvotagtfhudovbppavblpxqncgtsxplbxsgaqrbierolsmxfmnrcavewdokddxwgthisnnoctpejgrxmtbwkdrkdbuqhknviaejdpcxluhmpskouxjhgorstgafqmrxiurucwihtxbpnefnwgeftdwtorkanrfvobvpisomldnmtwtersuptaaouskcxjpoiorsednosssmcwesfkpwuhhsobxcvujdidgxwjogbmrxrghptoorbwcatgkbpsjdvxbtouxexxleingfcfbjpxlpmrtofdphiefbveihuuouhkxjcragqjiqalskqpvhabjoksthilswhxlglbcxumckpcpuhhkkfwmnvuggmurdplkcgnqnbqrgbpjfkbfbxuxupldjparcigdvcwcpbenehlkvkhpdxbklxiadjnmmraiqqsiolsflquqtgxibegndvjfklfiikbhtgccbqccmmmmqgtxspliesauomwnxtbbfowqjwsuombnddbopojcffmuiukfbnqogaxjvhttchnffudtidomhgueaeagnhhoqclgodvphvxcwjixewdhjwknndpcusmjroexerbxohgwetqktnrieevhabrxveqojequwjfvpdmhkadmwkxsxifkapfwrpuwjsbmndcxruivwlrvvvumdksnwulgpdgbakgbaajgfpkcjjcmaesnqleskatrqgapqmorqxaccwcmsmgsfrawvstpltvnesqqootnuirsjaincdnxplwxtixfbobdchidekunnddhrgetawxluduibujtnaxtclxrkxrrljgstohgfoeoeqciagxlhbhfwinkxgcavcbjocpqrsfhqcibpwsmgscjdvkwuvpteeoftkfqdlaaqbwjpflflkgoelnvjxashrufsfcnlpxptwubacqpvsvnpriovjvvpittsdmakaavsakjjvdcfifwuhllqfxulkdnumvraovjfiiakhsnloibufmkukuxufmupjlimhuncupafxpsgmuwxueuwaffrlpauiimpfxhugnphfjxxaleettqridxtekjselxbxfaroewdbqvveemllrqsjuncxgockdhjgoqsckngmdebhwxocxsulkxfmeauesfhrkhwujulgeecctsdstanheevlkphrhjuirfwexsafsejekicdxavujobnsluskcqltrrqgindvwvvdielbsfsllkjsmcgdkslqeakvxuxfapnwrimlifkrmxpucsvkxdhigsjmucbtlxntmxfmimktbbqxmdhpcsilhqgdkjcnxemljbptudvrsqsclgfklamjxsqsijrmlxteinrskbatwtqppdwubvndnhpbvkpbrhixiuladhnjgthvijttwitxthdaslsspvvnlngfgnddshreoakrirvxhefhpmeioasmhbajnckrsqnuqbvmikdbcmmguwnewbfnniemwottgnefhemnoanplxrgjrtfohijvbhwssnswpehuinfswthuwcvfmasimdphmdhbgbmbvikmoclmkodlaberitnsnuwkcxidjnlaivhkwkgtuokbgguwmvnfmvqhdthpmlnlqnenhoaifrugixtjbvkjrguooafxpdusmpkmbfilujjcnodfwduotncpevtbbdoevlsqvhwednbvotdbeiddteskfcxgcnnlkscjlnkspwegsmcmdspkrcmwqqlwtiivedupcvuxlsswctsxcuijeiqvvovqufhdkghbtkurmetvohskstojumoffmhweljfnucbfrsbfjhlnbcvcjrccagpatagucitvdpfjegputwaxqchtnrdwmadfcijdttmjgfwpsblbrblfmcsuxhoxxvanbhhcucbccuegtrunlwfxfsmoqrbwrdapanijpgkpbuogipdakxhumsgjhbfdslreqkdpunxrsfgaamjrvsgfqcauufkflwedigreciihopcmdoljejvjstjhipqudkbnjbljbpfkustjsxuxactbqdldkogbcrpsslgojtnruwjiewtuqphfmleakrvursajlunkdkrvouerbkxhuxcegengbsnmouklunxogorwlcddsnrrusmomewtvawsubohwmtjsfndsjiwogjcjqffavpsjtiviaugqscmajuvdkrtnfxjlbegcwxjcdtgmbuxsaehhbadpdhshstpavlmagpisqoehmndferrxuxwngjsvfmlcuaeepiriksasjrkaijdaucvnbjeggloiwerniarfjhcuiwdtddmtqbbiovxlvahktprejhcxnnjnrvxxuqfaiekfuhucclxjdjuicheahlgvvnndnifnukxmdvtogenmxrejtgpinlivsifxvtvemujflxduhkcefqgxensnbtiejujdmrmeakpjmxewoxgxxwudvuvbbunkdlpqsclvimkxouaturqxldgehtruxwqqotpvxvsavcjabfutpjjtthesqcwubbbnumcldtaevuflvttxboqmgcvgjqddjmpbtaaromwcjbnqkgcorsobltrhlprjoicnfvqpbitqsssxqneqgtcseljgenhehwearntvswiiwhejasxvsdviisvjokwwglkcxgiecamcpacnqdlguihcxamshifgscpthjqtcmaemevtcbbcukharuhibgnvdsrubvccaduqenmeeebcctocoqnudlgkrkiuvexsgepfrrqhaesfgjtrosxfeipfelvetmhsdbkukbquebftiopeblutonjoufiltorkojempnvekcbuqabmhtfxqktwkaabfsfcblwnifpojipjwacxjrkacgoumevgjaeldihxvqvkjtpblncxfhsomdbqdabtpawneqqlwxhajlqnfbamedorghvtqvjhablwecqqtcxjlacdnkeuhwncadkeblqccebadiqxurkeobpvebpbeaaithxtqcuvpbtkjaqpjmdkdputawjtfjotfcmjdcvpfaxfwlxatdakikudlbjqrqaupwsfucmiojvpkjwcqfrewcuhtbisppvksbjhcejrrlpcfcuokdxifphwcqwjbuwwumiangtrnacoagkthncpvjtbhustgatgppahvbdaegrsjmhbrtjaxpqhcgusotdursjubmqhfnrojvubwundbciqlwnvrephmekpljlmipvkrbjkqknbfcavstffhfgixgdrkwecflthhifugtkjbhcmxxlqaebgkrvbpecouqdtfbqpiqttpqgakqajucijetqqitfkvpwbkwemvbbqopuglxdfthkshutugdoviaugofokpouxgkcakmfookxxkgxirmfhgteeixrsfgdagstfpogtdfqdvxerknbbnh"));
// System.out.println(frequencySort("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiissssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppprrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooommmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccwwccccwcwwwwcwccwwcwwcwwwccccccwwwwccwcwwcwcccccwccwwwccwwccwcwwcccwwcccwcwcwccccwcwcwwwwcccwwwwwcwwwccwwwccwwwwccwcwcccwwwwcwccwwwcwccwwccwcwwcccwcccccwwccccwccwwwwwcwwwwwwwwcwwwwcwcwccwcwwcwcwcwwcccwwwwwwcwwccccwwwwccwwwwwcwwwwccwcwcwcwccwwwwwcwcwcccwwcwccwwccccwwccwcwwcwwccwwwwwwcwwwcwwcwwwcccwcwwccwcwcccwccwwwccccwwcccwwcwcwcwwwwwcccwcwcccwcwwcwwwcwccwwcwcccccwccwwcwcwccccwcwwwcwcwcwwwccccwccwcwccwcwccwcwwcwcwwwccwcccwcwcwcwccwwwcwwcwwcwwccwcwccwwwwwwccwcccwwccwwwwcwwwcwccwcwcwwwcwccwccwwwcwwwwwcwwccccwcccwcccccwccwwccwwcwccwccwccwwcccwcwwcwwwwcwcwwwcwccwwwccccwwccwwwwwccccwcwwwwcwccccwwcwwcccwwwccwccwwccwwcwcwwccwccwccwwcwccwwcwccwcccwwcwcwwwcwwccccwcccwwwccwccwcwwcwwccwwwwcccwccwwwwcwwccwwwccwcwwccccwccwwwwwwwccwwccwcwcwwccwwwwccwwwcwwcwcwcwwwwcwwwcwccwcccwccwwwwwcccwwcwccwcwcwccwwwwwwcccccwwcwwccccwwwwwwwccccwcwccccwwwwwccwcwcwccwcccwccwcccwcccwwccccccwcwwwwcwwwcwwcwwcwcccwcwcwccwwccccwcwwcwwcwwcccwcwwwcccwcwwcccccwcwccwwwwwwwcccwcwccccwccwwwcwwccwcccwcccccwccwcccccwccccwwwwcwcccwccwwwwcccwccwccccwcccccwwcwcccwcwwccwccccwwwwcwccwcccccccccccccwcccwwwcccwwwwccccwwwcwcwwcccccwwcwcwcwccccwwccwwcccccwwcwccwwwcccwcwwwwccwwccwcwwcwwwccwwcccccccwwcwccwwccwccwccwwcccwwwcwwwccwcwcwwwcwwcwwwwcwcwwwcwccccwccwcccwcccwccwccccccwwwwwwwwwwwcwwccwccwcccccccwwcwwwwwcccwcwcccwcwccwcccwwccccccwwccwwwcwwcwccwwwwwwwwwcwcwcccccwwwwcwwcwwcwccwcccwccccccccwccwwcwwcwccwcwccccwcwccwcccwcwcccccwcwccccccwwwcccccwcwccwcwwcwccwwcccwwwwwwcwcccccwwwwcwwccccccccccwcwwwwwwwwwwwwcccwcwcwwwwwwccwcwcwcwwcwcwcccwwwwwwccccwccwccwcwwcwwccwwcwwcwccwcwccccwwccccwcwccccwwwccwcccwccwwcwwwwcccwcwwcwcccwcwwwcwcwccccccccwwwcwccccwwwcwwcwwwwwcwccwwwcwccccwccwwwccwwwwcwcwcwcwwcccwccwwwwwwcwwcwwwwwccwwcwcwcwwcwwwccwwcwcwwcwwwwwwwwwcccccwwwcwcccwwwccwwcwwwcwwwwccccwcccwcccwcwwwcccwccwwccwcwcwccccccccwwcwwwcwcccccwwwwwwwwccccccwccwcwcwcccwccccccwwcccwwcwcccwcwwwcwwccwcwwwwwcccwcwwccccwwwwccwwwwcwwccwcwwcwwccwcwwcccwwcwwcccwwwwcwwccccwwccwwcwccwcwcwcwwcccccwccwcwcwccwwcwccwcwcwcccwwwcwcccwcwccwccccwcccwwwccwcccwcwwwwwcwwwwwcwwcwwcwcwccwwcwwwcwwwcwcwwwwwwwcwwwcwwccwwwcwcwwwcccwcwcwwcwwwwwcwwccwcwwwcwwwcwcwcccwcwwccwwwwwcwcwwcccwwccccwwwwwwwccwcwwccwwwwwcwwcwwcccwccwcwwwccwcwcwcwcwcwcwwcccwcwwcwcwwwcwwwcwwwcccwwwwwwwcwcwcccwwccwccccwccwccwcwwcwwcccccwwwccccwwccwccwwwccwccccwwcccwcwwcwwwcwcwwcwcwwwwcccwwcwwwcwwcwwcwwwccwcwwwcwwwwwcccccwcwwwcwwwcccccwwcnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvelllleleeellleleeleleleleeeeelleeeleelllleeellleeelelleeeelleleelleeeeleeleellllelellelellellellelllllleeelelelllleeelllleeelllleeleeleelelllleleeleellleelelellleleellelllllelelellelleleeeelelelleleellleeelellllelleleleeleeleeleeeeeleellllllllllelellelleeleeellleeeleellleleellleeleeleeeeeeleleeeleleeeelleleeelleeeelelllllleelllllllellllelellllleleeellllelllleellllellelllllelllelleellllleeeeeeelleleeleleleeelleelllleeleeeeeellleeleleelelellelleeeeeelllleelllleeeeeleleelleelelelelleelelleeellleleleeeeelllellleellleeeleeelllellllleeeeeellellllllleleelelleeleellleleelelellllelelllleelleeleelleelllleeeeleeleleeleeeeeelllelleleleleeellellellleleeeeelleleeleleleeeeelellelelellelllllellllllleeelllelleelellelleeleeellleellellelleleeeleellelleleelleeleeleleleeleeelllellellelellleelleleleleeeelelleellleeelllellleeeeeeelllllleleelllllleeeleeeeelleeeellelellleeeelllleellllllelelleleeeleeelleellleelleeeeleeeeleelllllellellellllellleeeeeeeeleellellleeleeeleleelelleeellllelleeeleeleeeelleeelelelleeleeeeeleeleeeeeeeleeeelllelleeleleelleelleelleeleeleeeelleeeeleleelleleeleeelelllelelleeleeeellelllleelllleeleeeeeleeeeeleleelelelllllleelllelllleleellelellllleeeeleeleeleeeeeleeellellleelllllllllelellelleellleellleeleellleeelelllleeleeelleellleeeleeeelellleeleeeeeelellllleellelelelelleeellleeellellleeelelellllellleeeeeelleleeeeeeelllleelelleleelellleellleleleleeleeeleeleeeeleellleellleleellelellleeeeeelelleleeellellelleelelleleeeeleeleeleeelleeeeeleleleelelleellleeeeeeeelleleleeeleeelllleleleleeellelelellllellellllelellleeelllllelllleeleleelleeelllleelelelleeleeeelelelleellllelllllelleellleeelllllelelleeeeelleelleeleleleeeeelllleeleeellellleellellleleeleeeleellelleleleelleelleeleelllelleleeeelllllelleelelllleelelllllllllelleelelllleleelelleleleeeeeeleleeleleleeeeeleleeeeeeelleeelleleleleelleeeleleleeleeeeeeeellelleeleleelleeellllllllellellleeelllllellelleellleleelllelellleelellelelllelellleleeeelllleelleeeelleeleeelelelleeelleleleleeeeellllleelelelllelleeeeleelleleeelellelelleeleleleeeeleeleelllellleleeleelleellleeeelleelllelllelleeleeelelleelllleeelllelllleelellleeeelellllllelelllleelllleeelllleeeeeleelleleeleleelellllellleelellleellleeeleelleeeeelleleellellllleeleleleleeleelelleeleeeleleeeelleeleeleeeeleeelleeleeeleleelellellellelelllleeeleeeeellelleelelleleeeeleellllleeeleeleeeelelelleeelleelellexxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqquuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuyz"));
}
public static String frequencySort(String s) {
char[] str = s.toCharArray();
HashMap<Character, Integer> map = new HashMap<>();
for (char c : str) {
map.put(c, map.getOrDefault(c, 0) + 1);
}
PriorityQueue<Character> maxHeap = new PriorityQueue<>((a, b) -> map.get(b) - map.get(a));
maxHeap.addAll(map.keySet());
StringBuffer result = new StringBuffer();
while (!maxHeap.isEmpty()) {
char c = maxHeap.remove();
for(int i=0;i<map.get(c);i++) {
result.append(c);
}
}
return result.toString();
}
// public static String frequencySort(String s) {
// Character[] str = s.chars().mapToObj(c -> (char) c).toArray(Character[]::new);
// Map<Character, Integer> map = new HashMap<>();
// for (char c : str) {
// map.put(c, map.getOrDefault(c, 0) + 1);
// }
//
// System.out.println(map);
// Arrays.sort(str, (o1, o2) -> {
// if(map.get(o1) == map.get(o2)) {
// return o1 - o2;
// }
// return map.get(o1) > map.get(o2) ? -1 : 1;
// });
// String result = "";
// for (Character c : str)
// result += c.toString();
// return result;
// }
public static void solveProblem(int[][] arr) {
List<Interval> intervals = new ArrayList<>();
Interval[] intervalArr1 = new Interval[arr.length];
Interval[] intervalArr2 = new Interval[arr.length];
for (int i = 0; i < arr.length; i++) {
intervalArr1[i] = new Interval(arr[i][0], arr[i][1]);
intervalArr2[i] = new Interval(arr[i][0], arr[i][1]);
intervals.add(new Interval(arr[i][0], arr[i][1]));
}
System.out.println("Correct Solution ----->" + meetingRooms(intervalArr1));
System.out.println("meetingRoomUsingPlatformAnalogy -->" + meetingRoomUsingPlatformAnalogy(intervalArr2));
}
public static int meetingRooms(Interval[] intervals) {
if (intervals == null || intervals.length == 0)
return 0;
Arrays.sort(intervals, Comparator.comparingInt(a -> a.start));
PriorityQueue<Interval> minHeap = new PriorityQueue<>(Comparator.comparingInt(a -> a.end));
minHeap.add(intervals[0]);
for (int i = 1; i < intervals.length; i++) {
Interval current = intervals[i];
Interval earliest = minHeap.poll();
// If our current meeting's start time is greater than or exactly equal the previous(earliest) meeting finish time
// then we don't need the new meeting room and we can enjoy using the same room.
if (current.start >= earliest.end) {
earliest.end = current.end;
} else {
minHeap.add(current);
}
minHeap.add(earliest);
}
return minHeap.size();
}
public static int meetingRoomUsingPlatformAnalogy(Interval[] intervals) {
int[] enteringMeetingRoom = new int[intervals.length];
int[] leavingMeetingRoom = new int[intervals.length];
int counter = 0;
for (Interval interval : intervals) {
enteringMeetingRoom[counter] = interval.start;
leavingMeetingRoom[counter] = interval.end;
counter++;
}
List<String> sortedEvents = new ArrayList<>();
Arrays.sort(enteringMeetingRoom);
Arrays.sort(leavingMeetingRoom);
int arrCounter = 0;
int depCounter = 0;
while (arrCounter < enteringMeetingRoom.length && depCounter < leavingMeetingRoom.length) {
if (enteringMeetingRoom[arrCounter] < leavingMeetingRoom[depCounter]) {
sortedEvents.add(ARRIVAL);
arrCounter++;
} else {
sortedEvents.add(DEPARTURE);
depCounter++;
}
}
while (arrCounter < enteringMeetingRoom.length) {
sortedEvents.add(ARRIVAL);
arrCounter++;
}
while (depCounter < leavingMeetingRoom.length) {
sortedEvents.add(DEPARTURE);
depCounter++;
}
return getMinPlatform(sortedEvents);
}
public static int getMinPlatform(List<String> sortedEvents) {
int platform = 0;
int maxPlatform = 0;
for (String str : sortedEvents) {
if (str.equals(ARRIVAL))
platform++;
if (str.equals(DEPARTURE))
platform--;
if (platform > maxPlatform)
maxPlatform = platform;
}
return maxPlatform;
}
}
class IntervalSorter implements Comparator<Interval> {
@Override
public int compare(Interval int1, Interval int2) {
if (int1.end < int2.end)
return -1;
else if (int1.end > int2.end)
return 1;
else {
if (int1.start == int2.start) {
return 0;
} else {
if (int1.start < int2.start) {
return -1;
} else {
return 1;
}
}
}
}
}
class Interval {
int start;
int end;
public Interval() {
start = 0;
end = 0;
}
public Interval(int start, int end) {
this.start = start;
this.end = end;
}
}