-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathlintcode_test.py
861 lines (728 loc) · 149 KB
/
lintcode_test.py
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
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
# -*- coding: utf-8 -*-
###########################################
###########################################
###########################################
###########################################
###########################################
###########################################
# LintCode
from lintcode import *
print('SolutionTwoSum')
s = SolutionTwoSum()
print(s.twoSum([6, 2, 5], 8))
print(s.twoSum([2, 7, 11, 15], 9))
print(s.twoSum([1, 0, -1], 1))
print(s.twoSum([0, 4, 3, 0], 0))
print('SolutionAddTwoNumbers')
l1 = ListNode.listGenerator([7, 1, 6])
l2 = ListNode.listGenerator([5, 9, 2])
r = SolutionAddTwoNumbers().addLists(l1, l2)
ListNode.listPrint(r)
r = SolutionAddTwoNumbers().addLists(
ListNode.listGenerator([7, 1, 5]),
ListNode.listGenerator([7, 1, 6]))
ListNode.listPrint(r)
r = SolutionAddTwoNumbers().addLists(
ListNode.listGenerator([7, 1, 5]),
ListNode.listGenerator([7, 1, 6, 1]))
ListNode.listPrint(r)
print('SolutionSingleNumber: ', SolutionSingleNumber().singleNumber([1,2,2,1,3,4,3]))
print('SolutionSingleNumber: ', SolutionSingleNumber().singleNumber([1,55,55,4,678,4,678]))
print('SolutionLongestSubstring: ', SolutionLongestSubstring().lengthOfLongestSubstring('abcabcbb'))
print('SolutionLongestSubstring: ', SolutionLongestSubstring().lengthOfLongestSubstring('bbbbbb'))
print('SolutionLongestSubstring: ', SolutionLongestSubstring().lengthOfLongestSubstring('abcbadcaaa'))
print('SolutionLongestSubstring: ', SolutionLongestSubstring().lengthOfLongestSubstring('abcbadefgcaaa'))
print('MinStack')
s = MinStack()
s.push(1)
s.pop() # return 1
print(s.push(2))
s.push(3)
print(s.min()) # return 2
s.push(1)
print(s.min()) # return 1
s = MinStack()
s.push(6), s.push(5), s.push(8), s.push(2),s.push(4), s.push(1)
r = map(lambda x : print(x), s.minValue)
L = [('Bob', 75), ('Adam', 92), ('Bart', 66), ('Lisa', 88)]
print('SolutionReverseInteger')
print(SolutionReverseInteger().reverseInteger(123))
print(SolutionReverseInteger().reverseInteger(-321))
print('SolutionPermutation')
print(SolutionPermutation().permute([2,8,7,3,5]))
print(SolutionPermutation().permute([1,3,2]))
print('SolutionPermutationSequence')
print(SolutionPermutationSequence().getPermutation(2, 1))
print(SolutionPermutationSequence().getPermutation(3, 4))
print('SolutionSortColors')
print(SolutionSortColors().sortColors([1, 0, 1, 2]))
print(SolutionSortColors().sortColors([0,2,2,2,2,1,0,1,0,0,0,1,0,2,0]))
print('SolutionLongestPalindrome')
print(SolutionLongestPalindrome().longestPalindrome("abcbe"))
print(SolutionLongestPalindrome().longestPalindrome("a"))
print(SolutionLongestPalindrome().longestPalindrome("abcbadcaaa"))
print(SolutionLongestPalindrome().longestPalindrome("efgdabbbbafg"))
print('SolutionRemanToInteger')
print(SolutionRemanToInteger().romanToInt("IV"))
print(SolutionRemanToInteger().romanToInt("XII"))
print(SolutionRemanToInteger().romanToInt("XXI"))
print(SolutionRemanToInteger().romanToInt("XCIX"))
print('Solution3Sum')
print(Solution3Sum().threeSum([-1, 0, 1, 2, -1, -4]))
print(Solution3Sum().threeSum([-4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7]))
print('SolutionLarestCommonPrevix')
print(SolutionLarestCommonPrevix().longestCommonPrefix(["ABCD", "ABEF", "ACEF"]))
print(SolutionLarestCommonPrevix().longestCommonPrefix(["ABCDEFG", "ABCEFG"]))
print('SolutionBestSellStock1')
print(SolutionBestSellStock1().maxProfit([3,2,3,1,2]))
print('SolutionBestSellStock2')
print(SolutionBestSellStock2().maxProfit([2,1,2,0,1]))
print('SolutionBestSellStock3')
print(SolutionBestSellStock3().maxProfit([4,4,6,1,1,4,2,5]))
print('SolutionBestSellStock3_2')
print(SolutionBestSellStock3_2().maxProfit([4,4,6,1,1,4,2,5]))
print('SolutionPowXN')
print(SolutionPowXN().myPow(2.1, 3))
print(SolutionPowXN().myPow(2, 11))
print(SolutionPowXN().myPow(2, 16))
print(SolutionPowXN().myPow(3, -3))
print(SolutionPowXN().myPow(3, 23))
print(SolutionPowXN().myPow(0, 1))
print(SolutionPowXN().myPow(0, 5))
print(SolutionPowXN().myPow(1, 0))
print(SolutionPowXN().myPow(5, 0))
print('SolutionSortList')
l1 = ListNode.listGenerator([7, 1, 6, 5, 9])
# l2 = ListNode.listGenerator([5, 9, 2])
r = SolutionSortList().sortList(l1)
r.listPrint()
print('SolutionMergeSortedList')
l1 = ListNode.listGenerator([1, 2, 5, 6, 9])
l2 = ListNode.listGenerator([2, 5, 9])
l3 = ListNode.listGenerator([2, 4, 8])
lists = list([l1, l2, l3])
r = SolutionMergeSortedList().mergeKLists(lists)
r.listPrint()
print("SolutionClimbingStairs")
print(SolutionClimbingStairs().climbStairs(1))
print(SolutionClimbingStairs().climbStairs(2))
print(SolutionClimbingStairs().climbStairs(3))
print(SolutionClimbingStairs().climbStairs(5))
print(SolutionClimbingStairs().climbStairs(6))
print(SolutionClimbingStairs().climbStairs(16))
print('SolutionMergeSortedArray')
A = [1,2,3,None,None]
B = [4,5]
SolutionMergeSortedArray().mergeSortedArray(A, 3, B, 2)
print(A)
A = [1,2,3,8,9,10,None,None]
B = [4,5]
SolutionMergeSortedArray().mergeSortedArray(A, 6, [4,5], 2)
print(A)
print('SolutionMaxSubarray')
print(SolutionMaxSubarray().maxSubArray([-50, -1, -2]))
print(SolutionMaxSubarray().maxSubArray([-2, 2, -3, 4, -1, 2, 1, -5, 3]))
print('SolutionMaxSubarrayII')
print(SolutionMaxSubarrayII().maxTwoSubArrays([-1, -2, -50]))
print(SolutionMaxSubarrayII().maxTwoSubArrays([-2, 2, -3, 4, -1, 2, 1, -5, 3]))
print(SolutionMaxSubarrayII().maxTwoSubArrays([1, 3, -1, 2, -1, 2]))
print('SolutionValidParentheses')
print(SolutionValidParentheses().isValidParentheses("()[]{}"))
print(SolutionValidParentheses().isValidParentheses("(})"))
print('SolutionWordBreak')
print(SolutionWordBreak().wordBreak("lintcode", ["lint", "code"]))
print(SolutionWordBreak().wordBreak("a", [""]))
# stack overflow
# print(SolutionWordBreak().wordBreak("cadeddgdafafdadeabecbcagaedbeacccbbecceebcfcaabfcefccfafaacbdffbffegeagcacccbdfcdceefadabbebdadagbaggbfcfdgdegdabdacdffgcgaegcfgfceedgffgeadeaddfedabcdbeadfcbdacfaafcbbccabagaefdgcebfggbggbdbddbccbfcfgdgcdebacdcbdgfbeccecadabefgbfcbegbcfcgfggeccdeedgabggadbecdefadcbaefadegdgbgebdfdggccgaeabgacbefdgbcbbffegcegaaccagdffcggfabgdaeddeggcffcagfddgdcbbacfebaabcdaegceggadagefbcfcecaedgabdefaagdaaefeedcgcdfbaadcbabeadccdbaabggabfbaabbbbcaggbgfaecbbebadbeddbaccedgadecaccedebecggbdcbfdecabfdbggfgaaebgbccedacfcdcgfecfbbfafceagadaagagadeaaggfcdabegfddcaebdfebgddgcacddbfdfefgacfeceadfbfaagcfffcagafccbbdbcdgbefagacgbegccdegggaabcdecaefaabgfbbacedddgfcggbccedccfedcbfgcbdfeacgaggfgaabgfgdbccfaeggefcbgabdfdfbfgaefgccgadedbcddagfbbecacffdcdacceaaabfdgeagaddbdfeaddcebadbdgdafaeeggdddgbcgeaaagaedfefbcebfabfeegbcccfaaddbbadfbaddbeaaeebadgdecdfcadbccbfdabcdefbaeacfefafadbecbdgfggggabdcefdfacaebfdeegfgbadgadaggcababbecfdcbbeaagcgcbdccbageedabdebefgedgdbaddbbgcbdfbeabdcdcfbbbffbeegeabecacbcddcfcbgabgedfbfdcgacccfdgebaddfbagcdbbaagbffbfgceegfagccbgfcdabdfbgfabdfegabbebgedeegfdeggeffgbcbfffdbbgaecagaedfdacfccgdcdaecafagdaffabaegegeafadedcdfagbgeeedfdbdfgbefdafgcedececcgbdfgegffaaaffebdabfaedefbfaddgdccdgcegcgaedbadadcfbffffadfacgeabcbbgcdgcdefbeaddaafbgeccbadgfbbdfcagcbaebgedcabdecfdaccgdbcbagfgbcfdcccdgcccdbeebddefeafgcegcddeadcacagfffcaagdfaabaebcdddcbageeffebcaddfgegbddddabcdaadefbfddddbfbfegefccebfagdcddgfcffaeggbefadfbegfbgfefffbfdacadcacaaeefcedgddaaafgbgbbfeffdcacfbbegdbeaccgecdabeagcebgegaacabbabdegfbdagebdefgfafgaeddbgfdbfgdcdbbadgdgefagcgbcaebdgddedfgdecaebdfgcbdeacaddfbddgdbcaafcfgfggdcadgcaadafaefeefdccgggcdbabdcfabgddbacafebgffadaffcddababefbdaacdbgfcgfcddcggffgceadgafbbdafecebcgfeggaecdfeddcbdbddbbddabadbdecddbdfcbegdgaebcbbedcdceggagdccdcegaaafffbgacagfgefbcggfegaacggfcecaedaafaabecfedcbadcdbedebcgbcbgabcbgebbdffbecedfegdafabaabbdfegadcfffeggdacdafcddceafcegccbbeafcefgagafdgeedgcfefbccbcdggfebbebcebdcgccfdcfdeededcfbcedcfbfgcgaebdcgebddegcaeabeebedaaegcgaacgbbbcgedaadgaacdafdbfcegbfgbadegeeeeedfaabfacbbafgcedadfgdfdaegfceegcbgeadegceeafdabacbecefeefgdgcfffcefcbfaedgabbfefadddadgfcbddgdbdggcbacfaebeaabebabadedcbbcccddagbagfaegfdgeabecgegaadcdaebbbbgbaggfbbdaebeedccgegdaacfffabaagcgefebedgabebefbaefadbegggafedaagfbbaeaegaaabbacaebdeebaaegfefbddbefcgaeeaebdfeagfeeafecefgcgdaeeaeadafbbacagbgdcaagcdbfbcgfbaaeacfegaedcbeaccggcfgaeaefagabaecbaeecadefbcadbebbaebgefcgfbbdccdbaagcfacdfaadecabggabfdddafgeceefeebfebebgeefafdcgcecgggfaadgcbgdgageagcecfcceaaebdgcabcdbbffbffgddecfaeeecabagfgbacgabbcccccaagcbbgdafabefbfgaaceeaceaggaecbffaccgfdfgfddbaadebbdfbgeeeagbadegddddgbbbbdbaebgddefgedbggagbgbafffdeebbbaeddddafceabgfbgfgdeggdfgdgggffegdbbbdcffeggfecbebggabcgcedagcdcfafeageededbafddcaccaafcbaffefgbafbbaeecfedagffefgabaaccdeeacffgdafdcefacadabbaaeecgeebgebgdfgabfbecbbfaafagdfabffgdcffbeffgbeacfecccfcbeddgabgdefggddecdbagfaagfdgeaffgecbagecffaddeccffebaaeebccfdeeaeedafcdcbgfdacbbdfgecagfeedbbbfcbbbgggaefdafdddcfcebcccfdddececcgdbaefcdbaaadcbfacdacdgdgaadbdcgcdfdbdebggddebcccdfbafabadbbdgeggeeddefbcgcfafaebbdccfdafcgacgcfgdbeafaeeddfeadfgdgcfcbefacdeegcaaedegcdbeeggcgababedfcfgababgcgegccgeeeeabaegcgfcabcccbaecdfdebbfbabdfeebbeccegcfbcfddgdeeebacdggddccgggcaefbdccecdgfebffaeaaeafddaaedebcfefgbgbeacgeebecccaedfadaacfcefgdecgcacgbebgefgcdfcafefdcgaegefefggfdfaegddaefgecbcgafbfbbgfcbdfgccdafddfegeaccdcecbcbgbgcfadfefcbgagdcgbgdaefffdfceagcdaeffebgadebgfeebbcbecdeaagacdaacgagaedgcgadefgedfacddeecfcdeeaccbcfggccafbfeacfcaagbegbggedddbbfbbdccbcfbgbcggeddbeaefcfgebcecbfcdaegceeeccgbgcffbcdedaddfceddfcdaecfdcfcbbbdefccabbaedgegeebadbggbeeeddbfdbceccbaebbecacbgfddcgefbaegacfbeedbbdaggfdedfdfcedffcccgdcbdgdebdfcacgefdbbcecdgdcafcdcdacfbgcegcfggccgbfefdcecgdagcgefbafedffaacdbebgdcbaefbbaaeefeeddfadedgdgdedgccgegcbdabgbfaddafcecaacdcededdeedbgfaggecdggedddcgfbgfbfdadedgdeccbfcadffgbedbcggaecgcdfacaggegebddddeceaddbgdcefdedgbbdcfbgfddccfcdefccdfdfcdbgfdfcgbeeeceeecaafdabbcgbeeeegfadafdfdgacgagaeaedcdddafdeafbcaggafgdcbfgbbgaeabgefefedfabcecegedafgfacdebbbffcdcgafbfccgecgcgfgeccgaecbdfbcgggbcgcffaeecdbcedgadafgacgafebbbdfcfegfecfacgddaegagfbgfeeeacfbefaegffcggecaccfcfbgddcaccbffbbfceffbdbffgeddfbbgaecfgcbfdfdgebgagfgaddaggcccccbcccbdabgbadgfebdegaaefffgfdgfbddgeadacgggbgfecccccfdcbdfdagfbagefagdfcbfeeebeddfcfffbcfcaddfebadbgfgffgbbgfeagfcbgcggebdbcfadgdbeddaaefbfgbdbcdceadbedefcccbfdgcfccgbaacedeafgfcffbbabbccfbfdbgbbfeffbaaegdgcgbedbcbdcfabecgbabcdaccffgafdfdfcedgcbgabcgfgcceegaebfdbegbdbfdcagdaddacdcceaageafcebbdgacgbgagbbdadbeeffcabgdeeddadcabgaefagefbafeegbbfadgcadgfbfbcfaededeegddbbdfcffggafaddaeafcfcbdebbcfgfcceegcabcffedgcgdcgabeeffacceeeabbdaaebgdccgegfbcdcdadceafcgbbabfffcdebgfcfacdecbcfaabdcddeefbgcaeadagcacegceegfeebffdacfefcccefafddfdbggcdabegaccadeccgadeagbefddeefgfdgeefcccebbdgebacaedgbdfdccfddbdbdcdfbcaegabafcgfgagcgafbcgadcbdcaadfcdbbdaegdefcdceabdccgdfdfddaadcadbdcecfcgfefbfbcccdffeeadedebababfbgfbfefddeaeaedfcabgdgfagccaccgadddgedgbbgagafbagbdddgacagecfdeeabceeeeegedaabbbgcbfdagbaabbfegfabdacefggabfbabgggggcaebcbeegbfaccbbedbdgdccffaaadfbcgaeeafgcffecbadgfcgaafadcggfddcfdagfdfbbgcadfbdecbfaaadddfccgbffcbbabegdbcgacdgfbddcdcdecfccbeeafaaaedgcfbebaadbfgbgdbbfdfcebegagaagddfcdbgadggafagaedfcabgbcbccbffdcfafbbdcbedfdbgcbgaddgcfcggdgdebdgegcdfeagfcfcefefabgaadbbgdaebbaddgggaaaffgaddbfecccfcdcddcfgfffabfgdfabeaecdfeabfgcdagffaeebgfgbgdggabgcfbecgeeccfagfabeaafgdbfcfdagbfgafcdgbeeegeecdeffcageafgaafcacfacegddccfebdecafgcgbgbdfcdddfaaebcffbgbgfbaaegbfcaffbcfdaabdaaaceebeeabdgbebabdfcfgfbeacaaegaacagacfgegagcabeebedcbedcgcddfefacdgfgfbegeefdbdegabcdegfdgfbdbegfeffbgfaaefdafgfbcaecffggegfbgdccfagdafcebfeadbbgggdgaagfdcbgadbgffcfgdbgcddgadfbcedgbefdbcdccdffbdeeeafgbfdfdgfgfgggcdaffbceabggaacacbgfcfaaefeccgcgegfbafcbaegefgcbcbacefdgddaaagcdaabbfdbgcebcgcfcdbdebdffddecfffaegcbbbedfbcbeedceaacefdedffggedgdgcgaaeabadefgddebeedgcaabbcgdeeabaegeeeaefdbedcaebbdaaaccfgfeeedgefdfgbcbcafdgbcabdbeefcgagdeacfgbfceddggcbacffgadedaagagcddbfdcedacecccdggfgecdfaacebdfgagaddefbaccfcdgeeefcfgggfdcbggcgaaggegdcfbefaadccdbcedbbcacbgadbdaagddffcfcfadcagdebgfbgacaadccaccfecbeebfcbbcaafcccbccedfeafgfgbfcfebbggagdgfacccbdgggdbaaccegaebcfgadggabaggecgaefegfceefgfgdfdaeecgafcacdebfbfbaefgeaefdgdccggbeagdgeedcccacfcbdcgefbbcfgedgefdcfbggdefabggcfcdeegdabbbdcgbfgffbdecaaffeebbcebffagagcggbecdcabccaafaccacfabcbbbgbaceebbbbfgcabeggdfcgccfgcccageecbebcfgefgafffefegecdeagfaccfgebedfeeaaafgeacbcffcceacfccbgfbegadcafcbccccbefbgcddgceafddedgcbefdfbbbabcdeedabdddegfdedgdaddgegafgefcfaecgcgdafgdcgbababdbbgaefabfdbgaedecgcgbbcagccgdaeafbgeeafeaecabcgbadbacggeadabebfbaaceccfbagbccdgcaegdcabbdfggfgfaaegcefggbaacddafdcebcfbfggdbfedaggadddbecfgaaecfabgaaceegabbcbdacbbadfdddgfcdcfggecedcffcffgdafcedbgafecebedbggdbcbfdegcaadbeegabgecfbfbgddagbfccegadggdgbdgfcdafaaeecefbaafeaddddgbcdebcdbfgcddceefdfdgfdggbccegcdacdabegebbdfggbbcddcccaeccafagfgdcggcagfggdffgbdadeagagacdccffddfddebedbfdcaffdcceeababddbdfeeccfbebgbageffdddggfbefdbccfeeadceafaabbadadadecdeafdcfcbaebeddbffebdccdedaecbebfdccdffdddgceaeedaccdcgggedacegfgaeddbegdfeacdffffbcdegccdbggdfefdcgebabbaaeabbeaegebabdafaagdebgdaagdcfffcbdccfcdfgabafgbbaffadgefgeeecdecbedgggaffacbacfcgageeedacfegecacbbfdaacaadccbfadafgfbdbbffaebcdaadddecdcgfcdgggbggcbbbecdcddedaccabgdgfaegfcccecdcbcbadecbgceeedaaagacccegbbcdgbceafgdddgedbbbgfcadcbebcfbeabbgebdaaeebaagcacaccaebcaabgggffcgeefbgaefcgfcbcfgbagfadbbbeeeegddfgdfcfafgdbeeddaceadeffebdabedgefaacfafffgebgdgcggdaagfdebfbgaecafefagbgfdcbabfeedegfeebaadgbcegbcbeeacceefgcebbacffaccaaeffgceagdcdefcadccebbdeecabgdbaffgecabbegcaaddcecbdfccdcbeecgdfadbbdgbfdadeegeeddafgbdbdafdcgbafcggbdegaeaegbbgeabcaefafbbdabebbddcfggegaffaacaabbdgcbggdgcaddgbaabgbcaadcdbgbebbcdagdcabcdcccbgbbadcabgfbcfcdffeggbagdfdgabdaedddcdeefgcbegadgeadfebadabaacbdabeefgfeadgffbecfaacfgcfccfgccbgdaaebbafgcgbcbgcgeffecgfbccafbdafggedfcgffdbbfafdddefefeecececefcgcbacfdcbgeebffbgbdgffdeegefffdefgbcegbbbbcbacgfecagdgfbfbfdaafbgcffcgedadafcbgefeeffgacgcbbdbgcedbadbeacadcgdecfbcgcbddbgfeecaaggaedaeafebbdadfbcfgafgfaafaaefebfebfdcbagababfcgbddadbddgcegdadfgfecedeafbaggbfbfafeffgeegdbfdfagaeedaagebfffcfedgggfdafbeafagfacfcbbbagbdecabfbeacdddceddcbdeaadbfecabedefcffeccdabcaecaddbfaddfdadfdgaacbedfacggfdgeagebeafgfedeaabdgbddbgcbbbfbccgeccfdbdcfacbbfffddaabdbgbeeffgbcecgbfbdgegabebbaffggaedceabccaffeadecbbcgebbaggbfeeacbbabegecfbbcfacggfabceegegdagfdddegagabgdffagfgbdcedbgdafadeabggbbadcfcdbdfffeecfcdbfdeeefeedbfbcbffbgcbcdfcagdbgafddbecgaccfegadgefgcafdcbcabaagddedaefccbdaggceabcbffcafabaacbeedcecgcdagbefcefddbcfbdcgdcedgcbfdgdgcedaeaegfdfefcefefbedgageegddcabgcdecbeebcfbgbaebfcceeffbbeccfgcddeeeaadgeggdgddabafcbdfbacbfbdecedgbebebfdcaecaefgggggfdgdbcgddffbbegcdbdbgeceefdadefgaddgfgfefffgggddbfdcdcccdcacfgbcbgeacbggfaeaeedcfedgefaffbeecdgecdgabaacabcgfdaadcdegccacfffgbaabccbdebbbcfgbeedbffeccedcdcfdfacggdafbdcedgbgeeededcfdebdfgdceacgbecggcdegggcccaadgdegbdeedcdfdebbgdeccecgfgdcegdcaegabdadbbbececdcfedgefbbffbbedafbfafabcdefbcafaafbbcagfaffffgbbbecefbdeegddgbffeeaagdbeaedagfebebagagcgdcbeggbbecgcacddbadfccgcdadgfbeggaacddgdgfgafbgcgdffdegdfbgffbaeffgadfdegbbebbdgdfebeeebfacgfbcggffecccffebcdcafcdaeegbeffgbcccbfffgdbafgbbdfbdfaddadccebbgaefegaaccbggebdgdggffbbbefdgaaefagegfecdfaeefebfcgccfffgaccfbfgbdecdefddeaaddfcbaaagaaadbdeacaebfbcdacgebfdegdbgaafgefbfgecdcfbfcfeffgdfdeebaadbfgeeddgaebfcedbcaedgbcgdcfeacacddecbdfabdbcbgfcbcacdbdgdbegebegebccdeacfbafebaddagafgbefdaagdbaacagfdbcdebfafgcggbccecbafaeeecfffgegaagdfcbbcdadegebdacaeadecfabfdebdabaeacacbfeedecebacddecegdgeebcgddagbacdcdggccgacefffgfcfacebcaabfagfaecadbddecbeddbffdgadafdgedccgfebedccadbefcggcadedabcgafgdefbbbdeacdffcdcdacggaaebbdffedgdaddbdcgfebdgbadacfebfddbfcgafgafageaffgcgacfgeffcbfaddfbdgcedebdafgdegcagecffaebdcfdedfdcagdagfdggagfgfbbbeadfdaebadddacfgdcbgegfbafeeddfdgbeafgebagfdgaeccdbfcafgeegcadgabcdbdcfadagbeagaffecggbddcdgaddgccfeebdfeabgcfgbbbddgcbddabdfdeefgagfeddbgegaabdebfacfbgfafggebccdbdecgeeccccdeagaggcedbfgfgfafbbecdbabbeddaeecfgeagbbebcbecgfdgeacfaedacdgfeebfbfggdgefceagdaacegdgbfaebddecaccacfegcbeebadgbedecdbfbffeeefdegdcdfgdbcdgdebaffdgadeaabbcceffffcfeefgffaccddggabeeccbccgedbfdgagdfbeeacceeaafaadecgcabcdcfaagegdedfgfeeeefcceacbbdacegfabcgabbefgbcdedcedcggcdbffceafaefffacadfcdffacdeccegagecaafebebfbcbaeagecebbbcfefacecccadceadecbcgeggagbaagedgfbgbccggcgecbdafddbaadgbcbgbebbagabfcedfefaefbgfagfcadaggbgagbaegcfaddagfebgagcdddaaeaababegafecgbfgfebffeebfbcgffaaefefaecedacdaccabcgfagaegeffcbfdeffeddbddecgebbebfgeaaedbcacedbbfcgccfagbfdcbggceaebbddgbaddfafaegcfcgdaggbaacabddbbdeegcecfgbaafefbcbacfdfffdcafbfcadacfdgfgcddabggabbebdabgeagddafdgcddgbggbfegaebdcgaagcabagbgbceabecggfbfbfafcbeeacbdfebaedfgcfdadggggdgcgfdbccgdcefabdegeefgcggbffabgaefaabeaeaacggdcgbfcffdfegebebbefadgcfaacfaaadcbbddffbgefdgefbebeedcfagcgcgbcagaegbcbfdadefeefegebfgdaedbegdaffadcceggfbagfceffegcddeebcbbeeeeadccaaaffabbbcbegbcefaecfbecaaaaeeaefgeebfgcgeadaedaefgacecfggfdbgfbdbcadcbddgbcgfgegedegfbcgdaabecbeegcfddgbdgebeeadfcfcadaegfcbdcgffaefagafbbeafdbcdedgegfaegfaaccefdcbgefgfaafccdgagdcgeddfcceeecbdegffdebdddacgagfgdefebgbfedagffeegcbfbbeagfagdfccaccfaecggcefcfggddfdeafbgbfegeccfbggbbcegfcdcccgegafdeabbfacddbcgaeddfgcbbcfdcdgaabbdabadaedccgafgagabbafbdgdfbeedaceeafdadggcbebbgebgaabdggcfcaedeafefafbeacacfdbdbefaagegfbcfeagafcffdagbcffegabcadgddgbdgffebegbfedccbbabffggdccagbeefgeddeedaefedaabfaeffcdbaaefaafeaadfbgcgbbbcaeagccabddbgffcaedbbcfgaegcbgbfeabgbfbebfgfebgbbgbcdgeeeabefaeedadfedbgbcbaeefbcbffddegeccbfcgfbbbdaabdgbedffefgdacegdcbabagecddeedeaeeagcgcbgdbggfgggcffedbfgdfccagecgcbgadgagbeafgcdafdadfafaebbaffgdegdcabfacaadegdgadbccdbdeddececgecgagfdcffcadeeadcgcfggaggcggbagedbgdfcfaadegdfdbbcaafeeccdaacacgabfedccbfbgegcgaggagdbgaaddebbdaaebbfgaagagebecdfcgdfdfabbagbfagcafcdebfgbfgbbccegbgcadcbebdffgggdafedbeaeaacecdfedgcadffcgacdgeebcgdaeeabffgfaabefabfbagedcaeagebabaabaeccdecbdcaebebbefgdfcbbcadafeadffafcagcefbagdbfgedcegbcfdfgeecedadbfdeeffgbdcbcabggcaebfbaacdbfcddaacacfabcbcfcdffaecebddcbggbedgeeagdeccgcgfceaggbbfadeeagcbbgdbbagcgfgbdaggebdcgafefdbacedagfbdcddefcbgfgddfebdfcfbdfegaggdbfcfacdbaedbcdfgfabegegbaefcccgbeebbdcgeaababggabddcbbbeacfgcedcafacfafaedggfcggdcgffcdecdddagcbbdbegggbaffafaceecfeafgggbdffbdbbfedgeebcfggfcbcbbcaabddbedebgagdcfeefcbffacddabecfgbebbbaebdbacgfegfbbeagcabdcfefbgbbfaceefagfcbccfcafcfbfaffabagcbbfdfeaegcdbdffeedcdddcddbfdggcfadbdbecggedccgbfebdgbbcfadccgcgacbbfaeebcffeddefdacafdeffedaeffafcegebfccbefcfdgefebcffaafgddacgagafgcfcecccfcebcedbebbcagfaebcabafagcgdfeadefadfbfccfffggeafcaebdbdbbddcfebfbdeacgeagfaebgfbgedababgdddcddfbbbgcaccgebbdfggcgfdfeagcebdeddggcfacedeceegeeecdafcgedcdfacggaacbgbcfcdedgdgeggfabcfedbddcdgdegbgcbfdedbacgbgcfegeggageabeaeabcfafcgeagccbffbcccadfcfdddegbcbgdbbfcgefbecgddcgdbbaeababecdcbacdbfgacafadfgccdfddeababfebefcbdgaceabgbdcadcafgfgaacbaacffbfbbdbacceegacgbgbbefedccbgceafbeecfcbfegecdbfffceegcbggdbgggedfdabbaagaefcfcfcfaabegcabeedagdfeaacfaafcddabbbgafecebgbdbeeaedagcfcffgggeaedebbbcdcfddgeadaabedbdcaecfdfadeecccbegfgggabefdecedfdbdgebcbebagccaffecefbcfbbacafccbfcaadbfdebeabdddbcebfgagbdeffdafcfddfffacbaeceabddddeccdebabcageaedbbggdggbegggaagcbdgbffcfggfagdbagcbdbbbafdbfedgaaaagdfcgfgcagacaabdbedeacggadcbgabgcdbffecafgecceegecfgcbaabafdabgagefccbaadfegdfcceeabccdggcgfbbeagfgcdcegagggeedfaebceabcbfadgeeacdaeccaeagccagfdfcdaagceageacbabdedbbdaacebgcgbadaegeggaaacfbeecccdfdfcabafgggdcdfdcecceggfdfdgdgfbcdcdfagaageacgffddccagdcgggafdefeaefgbdbdgdcagagaeabfdedgdceacfdfaeafgeaadegcgecbcbbgedgbgdadebaddbbdfaadbbedgcbcggdcceegbddabbbeaacaffdegaeafdgedccbaefcafeeeffbfeeddgeececbdeeebfgcgdddffcdgadaaebefafaeaaedgcefegagfccfdcgfdgbedgaefdeacacaeccfcbdecafeedbcaceebfcdbeeeddbgafgfccfgddfbddcbaggccabbgaaebbeeddfgcaeagbdcfcaccfbcbbgggggcffaafecbgaeabbddgcedcgeggdgabgafdfgagdbgbbccfgeeecebdeadgffebdadaaggbaefgadcadefdbdbdefaedgadfcafbgfdcbebdaedfdbeebddggggdaccggfegfaadfbagfcbbgaabegcggageagbdacdedebfgfggcfbfgdcbggdggaebagddgbbfgfddadgcgdecdcfeagcgegcedaddffdbegeadgdbfabaeeccddaceeddedccdefgbeffagggbfafgeafbgccabdcbccbafaccgafdbefgeebacaaedabcfbfbbegabbgbbaagaacbedgabegfgccdcbddbcedcdaffacfbdabdedaffffecgfgdadcbfeadcdeccfbbbaaacggaeebaddbcbfbgfabcbgegeaaggabffdfgcgbbcgbegfgafebddebgebedgefdadeebfgdabacggfgccdafbfagdcdfaedbgdgfeaadegdcaaccdaagcecabaffgcgbgacecafdadafeeadbbfbfabbcbggeeddcdgbagcbeebeaeffcagbcbccagbccdfbgeddggeagcbacfcabbeggabgeegabagecdfcacggaadababbggdfecddacefbbbbdccgagaceegbgadddfcaaegaecdfbdecccfcfeffdcdbbbaeabfcffedaeeeegfgfddfdbacafggfgfdgcbfddedbfggdfceffdfdfcedcbeagebacbgbbbfadcbgdbeagdfcedfgbgcbggbdgbedebgbgeecagcegdbffefeddbbeceffddfcbcadgfdbggbdfdcdeecacefffcbefffdeddcccabeaefdbeggcfcdccdbdfdeaebdegbecffbeggbdfaafadbdgegbfcffbfbfccacagabgbgcgaaffbdbaegffegcdbggeafcdggbfbdfefgfebaebbgcgbdebfgebdfafcbdabbffagdecbdfadabcdggdaedbbaccffcebcafddggabddfeabaaccebefeedcfgafdgfegefdffggceeageddddcgbadgdeegfagfbeegbefdeadegagbgcdeebcdfgdfcgcdefdadcdedefbcadaaebcggdeebegfaecfgafcaefebgagbbbdbfgdgdcbfgggbfbdegfaaadbgdfadefaafdgedafaedaedeefeddeaafggaefcbaagbecfdfcabeefbbbbabfcbebgadcecadfecfdbfdgeegagdbcbaaddafaegefebaddeecgcgadabfeadaebadfdgffbcgbefbaecaffeegagfadabbeffcgeeabfggbefacbfadfdcebdaedceaeffbaddcafagecaafcacfabfdcdecaagaafgddgcdbgdacbeddbbedbcbccbfebfcabcbdddffddaeddgfeecdggdccbffcfcgaddadebedacfeaabcfafdfgbedcfbgabfdffbebcadbdfbfbggdggccbfecbcbggafagcgeggefafacecdcbebadebbdgfcgggeefbedgabggbbgccfbeffabeabdfbgaedccggbbebaaegecaeffbgdgeeegaeegcddfaegdbdcaaadbededcgaggbdaafccecdgaaabdbggcdecccdeagadegbbaabadacaagafceefgadcdgcgcebbgbceabcbeeagaabaeacecdfdafgeaefedagbcgdcgdgaaeafffgcbeccagdeddbacfegadafgbdddefgbfeaefabegfgaaaabddfcgafaddddgbdbaebfceeddfdadaccgdadbacfggefadaabafeeaeddfdcaabagcbeggabdgeaffgfcgcdeageegfbffdgeaffgabdbgcgccbaacbdedeecgccggbfcgdfaeggcbfgfeacggddbcaagbcdaaaaadbfaafgbeabggdefffffggcgfcagbggbgfebbgfedaedeegefbfdggdffcfcaffcbaafaaeadcfbgbcfcecdgcacdbcgeabccaedaadbgccbcbefedgcdcdaedbcddegdefbbfecdbefadgefbdggdcfddedcbfgcffdffebebfcededbcbafgbffaeggefcfcbgegbffacbgcbcfbagaecffbgeefbbdbgafcggdaeeffccgdaffcggacbfabcggfbbeeefgbdgdecefgfagdbfcaagaegaffageeceegafdbecggdfdccefbcbccdadcedgfabebaeadedggedfgbbfgbffbefdcagdbddeebgfbbagebgdgeefdgcbdbfaecgddfcbfbbcbgcedcbegfeedcfcfceeccbbfdggbefacdfdcaabcedaaeacegdaagabffbeggbcbcceegbegcdfdffcfagdfcgcaefaafgdggcdbefbcfgfdddeadaaabdacfcfegfbgdfcgfeefbedaefcbdbeeafegcaeffefffbgdgffgfabebeaffgggdggcdgcgeebbcbbeagcgfgdcdefggbcfbfdgdfaabecggdaaeabdbgcbgfgeecbdfdfbbfecgeadgaaebaabcccaefagbadbedgddfdgeeabcffdfcccffbdbbefcbfgggegedgdcdegbffgcbgfccafdadceaebdcffcadbbefcbcgaeagfceabcfgfecbbfbgffafdaacefaacfdaagaebffaecaffeaedfbcebgcdaecgbfdgagfbcfbgfegcdacbefccdegbabbcbddffcdeedfdceabbafddgdgedfdcfaefgedgagafeccgaddabdcaabgcdcdbdfaefdbfegacbafccfdcfbgcbccbccccddbfcdedabbecfcaafacbadfcbaafcdbcagdfccedccadcgcfddbbdefbbabdfaedaagbgdaegfbfbdggaeecgdbcbdcdgabdafbgcgbabgabcegdeaefddeafcgbgfeadbfabgcgecbdcddddgdadgdefdfcbfcedgfgbdfgcafbbgdabafbbdebdgddgecedbeedgggadfgfffegcbdbccfgfedebafagfaadedggdfeadfbggfcbgdbeedaggabacgdeaecfcedfgagabfafdfbbcggaadgdgcdegdbfeadadcgdabdcdgbagggadadebbfaededddcffgaabfdeddefcgaadcbecbfffafcdcfceabdabedfbbbbbccdebafdeadaddbgedeggggefcdbbabaegfdgbfeacbbcdcaagdbfggdbfdfaabcdfdbeafgbcgebacfdecebeaeedgafedgdbbeacbbddebabafaaccbfbafaffabdbbddbfeagabbdbcdbfacabcdfbeeagcgeebceddagffefebacbagagcagefcgbadgfdbafbdedgfdbbdafbaabgbgfdfebaeeefgcecdddcfgeecafdgbdggcegfedggfagfeebeacacaebfbefedcbaffgefaaefadgacgfeefcgaebgfecgeedgefcffaacaaaaggfefbgeeggeccfgdegaadcbdecdfabbcgefcaddffbcdgbedfdfdcfeacecffaabgdaecgaacgagedadgdbebaacafabedagacbbfbfbcdbbadccdeeffgbdfagbcbfdfdcgdfgeefafafbbedbafacaffebdbcdefebfdbbdaggbgafacffgebdgceddaeeabcgecdcdfdcdeegefacafbfdeccbaacddffabfadaggcgagcgdaagbcbfdfgadaabafcacedaaeedgfbgebcdgefdfeeaegdddacaecfgdggbcccfbdcdaccddggfeegbfacbgcfgebdefgedcfebebegdbddefcacbdedaabcaadfeaagfcaeecbgfeccgcdbgabagccaddadgdbgebbfffddcffgagbbdebbgegacebbcbaafafdafagagdgafcaaegafbfbbabaaaedgbacddbagbacfdaaagdceffaddaeccffdebedecaddfbcdbagdcdgdbafgbececbeeecfcagbegcfbfdecfcffdcceadfaecgafeefbdfgbbaadabagcbddggeadggafbbfdbdgdbcfgcfdfgbbddgabeecffgfebcadcgedcfaeefdeddgfaecedbafgbgbadffbaebedbdacggfggcbbcddebdggeggaceabafbgdbfbefabadgdeecgababegbfcdcabeceecfbeggacagbgdddbbcabfgfgfgaafdeddcbceccccaacebbegcaafgecgdcfdfbbbggdeacceebdcecfdebbdabdabdegagefafefbgfddfcbffgdggdgababdadaggbfcefadbceggdcgfbacccggafbabccbffbdcaaffaaacbfddcabafececcdbafgbcacfffcfddbabaegeeeacgdaeefgbdabacbdgeggfacddfegdbfagbfaadegfaecfacdddfebccefgacccgebcefdfgfbagfdaaafabdbaeeecggfgcbceagccbffbdedgfadddcdeaacdbefdcaaegcccdgdgfccceddacdffggggeffdagbfbgaeedbgafbcecegafdbaedacfgegbbcdebaceafeebcgccdcfaccdcbdeefbecabffgcddaddedgffeagdfbecbegdfdceaebgbafgeffagacgafccbgbgdfceeedgcedcgfecfgfbcdbcedeabbcbbcddgebggdbbfecfadbddbcegfgaaefcfgfdeeeccfbbbdgbdagbcefdaddeacbdgbdbbgfdagebaecbcaaeebeebcdfaggdafgeeacafgddfggbggeefcdbgeabdeagdccafdgafbfadcdfddeffeggcacffagaaeafcgaecacfafgfccgbaeggdffbbfaggaagbfbgcgcabfbffbggeddbacgddaccbdeebdagebeegefgabedagcdeggdgggadebdgfgfbadfbddbdgebcbdddedacbgfdcfcbggdcfacdabbfbbedbcabfbadbbabbeaecdegeddgeccfbcfecaecfccffbgdecgaedgegdaeaaabgbbbbbdgacaaefefedbeagbgbgaefabggdgbaaffbedaeacefbdcagdceedcdgabbbfebdcebccabgdffcaefgbbbdeafegegfeebcfddbcfbgbgcbdfaeaggeaegbabdafgdgefagafbgefbdbdabegabbddcgbaebdbbaggfbafbbbaceaabbdfgabaeaagfcgegacgebedfaeeecbgaagacabdggagadfcffebcfdbgccadaeebdgfabfddffddccbaceeffafdggcaaeaededdecbbdafgcaacgcccaceafffbabdadffeeecccbeaebbgaaeccdfdfgbadfbebbcdegccgfgggebgabcbabggedbdfbdggbeffgagabbfbcgedfgbfdacbcdeaeggbecbddaefbbedbddgeabgdabbaecedbcfbecfgaaddebaeafceadcdacecagffefbcdfeccedgfcgbgbbdggfgedfgafddegbeacagfeebaacgaddcbeegadfebdgcdfabcbafbabgeddcfggecdgeccgbdefededaggefecfgfeecgbbgfebfcfbcaccfdbeddgacafaabafaccdccfaeacdddfcgdedgedffecedcgffefaceaadaeebedebbgfefaaedcegacaacdcaaaaefabfcaeabdegebbbfgcdbcfggbagacgbeccbcgfgfcagbbggadfddafeaaeabcefdbccdccbgdfbgcccbcbebbecageffbedccdfgcbfaaaffcbeebagdaeebcdbeaebfdebeadfefcagecgabgcaebbeaabdgeagbbbabedcbcbgggabddfaggfbabeggfdbebbbfedaecgfbdcedeccegfdfcfagagbbbeebdaebadabcbcabadbdgbgfebcdafebeaeaaeedadcgggefaaddfbgddbdbabgafgcbecbfdaaccagagcdeeafccfegabcfadbbaebffccbggfaagbfdeggfafeagafgfadcbccfgfbgbfaecaebfaadddfagfaaedbcfbadafdecbffbcbfafceceacfdeegfabedcaeggabeeafddfgbeddefffgaccdfaagebbcggabdgddfacgfafbgbdegdcbggggcdabdebdeffcecgcaeaecfefaeccbdfeeeggdaagcecdbeagccggddbefaccdbebbfdabgafafcbebdedbggdeffaaafaccbbedgffdcagcgcbefdccfefeaegbfcggfaafgeffdacbggcdabgfccafegceaabcgfcfcabaceddededaaecdcafbgggeeeebadccegdgagfbbffcedfadcegfadbadddaafdggebcedcbggefecafbbaegefadagcgacgcaeaabgbdgdfbdaadfaaaadaadfdeabafcdffgfacaabebegadbfccdcbeggdadbcdefeccdaeegeacggbccffgedffeeddacagdagegdagaaacggfgbfaaccddgfdebcaebbafaabcgdefacddabbaggbgedaaffcededbdbcaaedbaaeebccgaagbeaecgdfeffdffccccfebdabdcfcgffgbcacaaagaagcggefcgfddggbddbfbegbbbbbefgdbfacaffbffffbeceegggabdaagaabfgdaaabcbbfbcffaafbgdgdccabecgacbbbfbgaaaadccfecgbecegedcfgdffddbffgefegdbeagebgdaefbgdfgbeeeefbfadgeaaffbeeecbefcdeffcdgeeacfcgcfdgfgefcafbageaefadfgfdafgfefgcbaeebggcabbbebebgddbbadfbggadfbdabeecgcecbdbeeeggfdaeeggfcgcfafbagacbaeecaggadbaebebcaacbabbcgfbgffcbddcfgggaagfbdbfecaadbcfbbbegcfcgebedbbcgedgfbfdgggdbbagedeaadabcbeadedgacecaaaaafacaedffbbgcgbdfageggecbdbadcaeacdcfbecddgbbedcfbbgecaebbaffaafdbdafafaffdaffadaedcgcfccabgbdagecedcedgddabcbeggcbfbfefdafggfbefafbgfaddfcedcfbcegebacdacdagagdgbcefafbgebbdaaeccfcabdgecfcgbcaddgcbgcebdbdcdbcaeaefbccgbeffbadaaaeaaegdfddcgeeddceaeefbdecbdacbeadfegfcdecfgaffefedcedfbdeafccgegdfdgdddeafafadabbcfdbgbcdadgdebfgcffbbefdgdecbdgbccegcfdeddadgegefbfcfbfcggfgbgddfgbbcceegbcafeadeadgdabffgagcdfbfefccfcaaagccadgffbebggbfcebadabdffgdcaeaebececdagdgeaebbeebcceebabaddagfeffcaagdgdggggcdfaaeffecbebbdbdcbegaeaeebcfccgdfgcggfddcgeadcdfgfcfgfdcggefaegfedcfdgdbcfadbecfbeefbdcecdbdcfedafbedffegddfbdegaffdcdbeffcfffgbeacbeagbfaegeeddgeeeafcfddgaadgdfbfdgfdfcbabbgccfacgcbdgdcabfdbcbaagcdadcggfbfeeabcdadccbafcgcffbdbbfdbedaegecgeeaccddeedfacdbbddcefgabeecbfdaagafbbebfceecbfcbadfdcfdeggbffdddbdbgggefafabefdbbcecfaccagedgbebadegafcdcdfecbbfbeabfaagegbaaaedgbfcfgdefbaddfeffedfffegcagdcgaedbfdbeceefdgaeffabbdfffgeddggeaacaeaafcecebfgaacccfaaggfbebdeaabgaedfacdgfgdbagedaecaaadfbfcbebgddbagffgcadeggcagbdeggdebeefdfbbaageffgddaaefegggcbgfeeagdfeegdegcebgegaabdbfgdegcaddgabebegbdgeaegfcfbaabdbeggeaaaebdebgccbeedfgbcccefcbcabgfgbgccagbaabdedfcfadfdddafgabegbgfcdbcccaafdbegffaaddefeaeceggfedcfgbacdegdbdecdagbagebadcddagfbdgeegebedeggfbeafedegbfceedgcgfafbfbcdfdbfeecfbgbagabfdgdebbaeddfcdfcdabfeddabebcaecgfgeadccbdbefdgabdgcadcdfccfbgdagbeffefgefgaaddfbfbcfbbfgfgdcbfdacaggcdfgbafcgcfdeddfcdgbfgdgfbgcabgagagddcecgbeebabfdcdfececbggcecfaeefdgbegbgeeffcfgaddedcfgbagffcfecgefceaegfdfccdgggfffaabebaecbggfgcbddcecgaefbafdfcbbeebfccaafagfbefgcdccceeecgdadccbaaabfbedbbgggbegbgdcdceddgecfddbbadcebgabcacgefdccegeecagagbcgbdadfbdffcfbabbdefbeaceabeebfffecgacedccccaffbeddgfaacdeggcabgddddbfeeeadecdedbfdbegeebefaaffeafffbadeagdegbfbdageabfbfdcbeedfdcbacgdggdgbgcabdgebgabeccbbacgfcafebaafaggbacdacdefaabffbafbcbacgbedgfbaaeggcfgfbcddbeefbggefbacadegcgabbgcaafbabeaagfbdafdfgeeeaaafcgcaeggffafgbaegaecgceaebbfdecbabafafcgdcffafcgfbfeeggbacddbcbabaecdgdbgecgbgceeffdcbegebbfffbceefgecaeccbeafdgdaggcbcdcdeecfgeabfbabeecgbgdaabbebfeeedefaccdbcffbagdgdbeacdcfbaggggecebfecbbaaagacfbbfefgbbfbgbbcdbbgbcefebdgbbadbdcccfeecfcbafdcbbfbabggbcdgcgcdbagcgaegaggaeafccffffcbbaabdgaacbfefdceaadgebcbdadcfdfadbcdedagcggcagdccedaaaggegeagecbgcgfdebcbcffgbgbfbfefcdcgaecdggabgfdecgccbfafffeadbcdebecfcafcedcdacfdbggeaaecbcacaeacaabgcgdfeabdeddfdefcgcaeedbffacdgcaebefadegeeabgbfdegdbgefdebbbfeaaffafggfgagccdbggedggccaaafeegbefdfecdbaaaagccfdggeefcecafgddgcegbgfcgdbddadadcdbdgacdfacgceabfgcbbeecgbbceeadbaagfacgbbbeaefgabgabggggbgfcbdgbgbbcfaebgaafccaccffaaeeafgcccffgcgebdegdcddccefdeffecgcggececfgddaebaaagceeecedbdcgbcbagbaededcedbgegbfdcecaffcbgbbebdgdeeefdbdecfgdfaedacddadgcacfffdfeffagffgfgggegegffdaedgcedgbgcefcbebaedebdffgedbbfgcaggaececcceefaeegffcgacgffccdebcdegefgadbggfcdbdddgfbgdaccgedgcbfbgfcafaeagfeaageabffbaeffddgggcgdbbbebebegbgcgbcegcegdgaefedacbfagfdgeceadabdfebfcebedcedgafbbfcffbgbbbacedfgcfdgfffgfcddacegbegfbdagbafeedcagcgabcbdbagecdcffcdcadddegcfdbbecgbgfbbgeeeddgdfegcggcbcfbgacaggdgceegacfafagadabbaceegbcdcgbgbccaaeccdefeddgcgfdbcadfeagdadebbacaeebdbecbagfgaaadcaacbgabgaacadbcbecefggadbdbacfgbgcfeadfedcbagfgfcffbcgcadageabbggbdcbagaebcdcefaefffbbgdddedbfgacgfbafdcdcgdggbdccfcacddaddeaacdgcgfagbbaddaafeaegegcecdfgebdfedcgaddbebfdcdeggfcbacafbbbdacbcecgcfecgegaddafaafebeecddfggfbgbgfgdcgfceffgbgcecegfgbfadgcedfbaebgfegebedcfccebeegfdaceeedcfbdcaabcfefbbcbbdgefcfegfafdddcgdeaaedcdabccaaefdbabcbbedbecefgfagadefedccdcbbcccaebbedagadfcdccabdfcdgdgfbeeacgeecfaecfebfefbbfbbfabdfbfdbefegbbdbcafdfebgecbfcgafgdfebadcbbgcfbabdcbbaeaegbfffdcefbdacgcabdegadbbbdcefdabcggddddfcgdcbdbdcggaebeadbcfegedecagacffgacefcgggacaeebcbacaaceaefgfebcbcbbccfdfbagfdgcgdaaeabegbcfabadfgdgaecefbfebegaccgbegaeeeggfffccbefbfdagfeeabgccabedbabcecfcfbebacaadegcgfegefaffdaaddbgagbadbecaagbccgaaaaagfdccdbcacbbgfaaccagdeggefddcfecbgcfeaedabegdgdggcdaadgdggbgefdgadefecbbbfdgbbcfagbfdbeeebddfgafgfdddcdffbeeggagbaabbeefefaeegbgacgaedgfdefaaabcdgfcecbfgeeaafaaddbebgfabaedbdedcbcafcbcgfdbdabbdgbbgdddafcdagcdedgdbacgaaggccfebgfddgceaaeaffbbddbabfafbgfgaffdagaafbddgebafccebagaebgggaagafafacfbabfacgbcffdbdebeeffeeaaedefegbbeegdageeceecafabegfeabdfagcffegfecgcbbgcadggabaddbecbgbdaeaabggffbeedgbefeeggeeecccegbbgadfcffdbfegedaaagedebagcefbgdebdbafgebdggbeggaagfefggfdffgeecfdfeaaadbgggecbcbdgebebbbaacfdabgaaaaabfcfbcabdfcacbfbcagbbbacfgedfdedbfeadabddefdeacccdaedegeacagdeabefeceggbgacfbaddddddbeccfgcegaadcdaafbedgadegeacdaefdebgeggagefggfadbbbbdedbaegccdacbcfbbbbaeafccffffefdcgecbebedbbbgaadfdeedadecadddgfbabbbgaddabecffafgafcdbecagfaadefdcdaaedggedfcgecdcbagbfebcgeddcbeedfdbgeedbffbdadfcgebedeegggbffggdbgfdabfaggdgcdbffdcbebfadgccffdbbdgadeecbcddeagfcfcfbcgbccfccdcffgaaafgbfcaafdggebdbbaeaffcbdceabbbbebgegcbddgbdaecdfdbbafcgaeacbdeacfcbaebeeaafbgbfadcfbfegffgcfgcdbfcgdcgbebeagedbbefdedcecdcecbadbeabgefabgcdeeebafedbbfcfadfccdcbagfdecebdbafafdcafagagbbgaeabcgcaaggbfegceedgedgggceacbcebbfgadbbdeeeebfgeaccaggcgafgabgcacfdcbebgfdcfcedddbeggdccbgabefcfdgagggcgcbageecdabfggdfbaeagadaagadadcedcadacebfcbbdfabbgfagfbeecggebfbfagacbfdfffdcbffddddbbaadbfeeacbfebbafebfedaeacgabebecaeeggcgdbbeaeddcgbbgebgebgcfcadcgdbbecgadfbgbfefcfgdcfcbbbedgbbgfecdafcadefabecdebcfefbbgbbgegdebbcdggacdgccgebfcbccgegbbcfeeadgefgaafgfdbdbbcbfafafceffgfgebggdcdfbecefdgbeebfadfabcbaafceecebdfbdbdbcggdegdaccebecbfebgefagedefccddccadfbbfgacfbefdfbeabadddecfbaadcaceeagdaadeadcacbcgedabecdbbbbbeabaabdedcafedacgafbbccdcgdbffdcbcfedgbdabaadfbdccaagebdaeaegegcdddadgcabcgegcggebaddcbcfgfdebdcgaadeedfbggagbbgceabecabaggfgcccfggecffdbffbbddbeababedccdagdadcdfggcgcbegbfgcddcdgebeccfggecbfcceccdcdgfeaecbcccdcagfffcaacffbcadccgceeegabaabbbgefbedfefbffabbfdbbfgggdcgcccacgebfbfbdbeffcdcbdaedgaabcacbcfcagaebgagdccdfbbgeafdeadbbgbdfgffgaacccfeggfgbfecgadefdabegdagccedffeefbcagbbbdfcecddgcbgeeacbeacafabgdcefdfbeegdbgffdcffgdeafbabffccgffggdfdgbbbaefgbedefddeecgddcadcdgabdaaadfgaadcegeecgecceggcggbcgagdfcdfbccbfacgaaeddfcedeafgebabfedcdccfcgababddgbcaaeebdddggdedadcdfbafggagfeagacaeecbcggdgfaebebfcegfgccbfgdbbdbbbddffgadceceaeabadcgeaeccfagfdaeaeceffagbbbecdagcdabfedgaecfafgddffcfecacgcgafeefcfefdacddcbfbfacdaedfdegdcgfafabaccgfeeefbbcgceadbgbcceadafeffbfbegccecabbdcaegeceadbfbgfcgabbgbeeeeaddfgdcbeffdgdcgafddadaccccebddecfdegdcgeffdebdgcbagagfcbegegbaadcebfbabbadegbgcgadffbcabbecebfdaaadbcddededdbefecdcefdfedffbfabgfaabeafcddgaaeeffdeeecdfbecaffdbdfagagdgcafefbcbfdbbdacbebbccefbcgcdaaaeedccbfeabdabcdabgccadceddcbbaddfefdcfgcfggbaafdfeecbfaebdfdadbbcfccgdebgfefcacgfaagfbagbfadbdcegddgcfddcbeadgcfegeedgegeedcabfdbecgbefgcfecgdeddfabcfefefafcddacbcccggaabgegcefbdceagaeacddccceafeedcbeecfecbcfgbgbbceeccabfgaafcffefbegagdecageeabffgeebbabbfbegdfgagabdfcccegfgbbfedcfbdbdfefegcdgaeacaeeaadbbcdcebacbcffaedfcfabdbcbcadacdgbdbfbgbbecgcegedafbcfdacgccgfdedafeeeadebcbfebagbgdeffdebfbfbbeaggcafggccgcgefdecfbbdcbgdaababfbebgedcacaagacfcgbgfeaafecbafadbcfefdcccafbafaaddggaefbeddbbefcdcebdfbecddgeacbccdedfdcedcebcbcddcefccfbdebeaedbcfceadcfbbecbacegcedfdfdfbadgdfedeeeagcdbfbfadegfgffabfbbgdffagbafefegdgeecfgbaeffgddcgbdaccdgaggageabaebbedggfadefdafcbaedeababcafgbfcfcadeafdfadaeefaadbdgedgfdbcbceccaggafaeedebabacdbcgbgdgfgfbcabefbabcedbfgadbfgeeecbdefebabebgfeggfbebcgfdebaebfaafddaggdbbcgdgbfbegbaeddcacccgdfgbfacgeaabagefecdcccfcfgddddgfdgagefdbgcefbbcaeecggeaedcfdffbfdgbdbegaefdbefdbacbdgaaccbeffggagegedcdbdaadcbbadfgdbcaabbfebdddagbaedeeddcaadabgaebdcefgceaffdcfbbbgbadgcebbcccdbddbcggfgaceebgagedggdbgggcgdbaafebcaabgddeffbddfacgbaecgeadggeedcegdddaafagedcabefbaecabgfbdgaaebbbcfebegdcaecbbccffebegcfbbgageafcgcdeceefcbfaeadfbabgegcgddedbdbbfeggabaceabdfebccecggebfdafgccebdefgfgabfbdddcgegbgbgaceaaffaccbecddedagagggbdfagedfcggcdgcecagagddaccaadaeefbcadcabbedbfdddacadffdcddgbegbfabfbffeeecffeacdbeaaddgdgbacabdccebfafadbgdfbcbfcfceaefcaggagfefecgbbeeabgadcbaccdedfcddfgdceeceffdbdgacbggbdefaccgcgeaabggdcgcfafbgaebccgbfegaffecgedecbgedceddabdbceafdbgbgdddfedabafebgafefeefcedfbfcbbdfgbaafaggdgcbaddgadggfcagbdffccdgeadeaeefbdeeecbbfdcdgbeffcadfdafgcccbaabdebffgbbaabcabdecfaebgcaaeaffaeegcfaacaageccdfbdbfggbfcadgbgccbcdacaddgddagdadgfddaceaaadgcddgdfdfbcbadaceggaffeegdbggddgcddgcbgdbgebddeadcdfaffbgdgcdfaacfgfdbabcfcacbgbaedcegacabeeffdfcacgagaaaadfcaefafdgdafadcgbaebafccfebdcfdfdadabadaafgfegceedcgeffeadcfbfaagafgfacceeccaagegeadbfffbdfdcbcfebcaegbfcadaebcfbgcabaccdebeegdbfcgaecbgcfabfeceefedbacgeedfeedfcbddafedbgefacebbccdcbcdcaefbgggfdecefacgeggdabfedffcedfdfeeeafbdacecbeggccfacgfaaecgcdbeabafbfafaffbgddgdcfegacaaeafdcgcbbbcaadbgaagccagdaddaaedbadegbfaadddafggbeaaefdbfaeaagfacgdafacaaggggegggbdbbecebbgcbgfecfffcgdgedcaccdfcaadaebfbebceggbfceebebbgdeffaecfdacaggdadfcbgeeadafabgbbaafdbgdaegaccdaeecgffbaccebbedgfebffegegfbcccfbfbdcgacdgagdfadcafafgeagcdgfgfceagabgcfbbdaadgdcaafeggeafdddcadbbfdefebdafddabagfadgcfccaaeebgaeacdedebefabcbdefbegdgfcfgdfcbdfbgcdegcfafdffabbdffacffdaefffbbbbbgegbfbafcebacgbgdcccdcagggeadbebabgdbdcaagebfbbbabfacbfdfbdebcdebbfadagbgfcddfcceecgcffbdfccgebgfcafdgabcfeececfbcfgcacedeccfeebgbaafdfagdcecdceccggabddecbbcdcbccgcgbcgeeefcdfagaeebbggagbdecebbffdgfbecgddbagdcdeageefcbfgccfeeafcddecdfaaabaebcecgdefgfbfabgacdbdgcffageaaacgacabbedcebdfcbdcafddafabafgbaaddefgdccaacgeebffcbgfegbgffbabefacfdfecefeagaabgddgaaafdecgadafdbfaccgcefcedagcggeeccbbbebafddgacgedceddfddfdccgbddfedegdeeedecebagecefaeebgdgbggafddeefdffdfedfgbeddcadacfbfbaafdgadccfbdeaccgedaedbdabcegfcdebabffeddbcabfdegabafcefegfdaefbfecaeegeabbbfggcfbggbacgddegaafdedgddbgcfaeaacgeabccfbcgeeebfdcaddddgbedbcebfbdgbaaedacbbbcgeabaeefebdfcdaafgegfababgaadaedbfdgaaggcbfceabcbbfgfaebdfgfdadgeafbfecdbgagaabgbbaadbadgagbeadcfecabbebfbfggabgceafdfggggecdfecdgabdgabdedaddecgdfbafdabaggcgffffegefgffabcbcdebfbfaadagbbcbbcgcecdgbgbgdgbdddgbaffbgcbgeddeegfgabedgebgdgcefgbaeafgebfgecdeecfbcgbdaeadddacgbbbabaaacafeadfggccecgadfbcfdaebfbdaabeageacfdgcgcgefagdgafbddfddadegeadddgabbgddafeagfffaefgaabdgbedfcfceedfafcdgegfdcbfcdebacbdabaacddffdbecfegcgcfdaageaddeecegccebdfdfebccdccddcdgbbgaffccabdbfebbeeecaeaegcaddfedfddaegdfgaagdegbeeccdbaacacacddcfgbgfefddbacacbaagffdfgdbbeegfecacdgbaccgagbgggdbccggebddefcdeecdbcfbdgbaggfbaabcdgedddfacegdaadcefcffedbdbgdbabadedfcbfadfcafacgdeefbbbcgagddcgffgaffbabaadfdbgdadefgebeacfdbebbccfgbaagfadbbdedebddeebfdagacegdabbfdbefbdgcbfddbbdbbgcaggbeacccccbbegggedddfbabbcgcefddddgcdgabbegcgdcacfabgfcbaddbbfedefbcdaefgfeabadgbbbaeecedbeaddefdcdfebbbgecbaaebedcdgdefbggebgadcbegbeeedggacabaggaaaecgeaefaccdgbgbfbggedadacdbbfecdagdgdaaaeadbffcbbaeeggdfaddbdageggcbedgeeebcdcgeagdceffaacacebaffbeacbbebffeecdfcbeabcgbgbeeagccegcdddfgdcfbcfaaebafebadgabgdbadafgadcgdbcdfgbbeccgdfeacgffacdegbgegbedeaadcbfedfffeegaecdefcfebbdgabddddcagdcfagaegfddgdcefefegbefdcecbaeeegbdgfacefccfefdffcgadagbbacbabeeaefbadfccdacbfbggebfgaeccfagebddgdefefefcffbcacgffdefgeffcgggcggedafefafabddgefcacbdaaaffdeagdddcggebcfeebaedccaeaadcefgcgagfeebacffafegcgfdacebbfffbfdeagbfedaadagadefabfacceffefggdaacedgeefccgfgbbbbffdbddbfbeaaffbdcbbdgabecgcedbbabdfdbfdddaacbbeedgbdacabdebbbgfefcfaafcfgbafbbbfggddaddbdggdbggefdcacbbfadaefgeeagcgdbffdcgfcecggaadcbgfgcebgfgcebacaecddgggcggbbddgeaedfggagcdfedecabaabdadafgcdefbabaecggdcbbggcgffdbefcdeebgdgbaebcadbddbbfgebaggdefaacffdafdeebgaefcfddfecadfdgecfbffeacgeeadfeeddedggbdfbaffgagbecbfedgbebbcabdcfbbdccagbaaceacfefdebbgaefcfdbeefbfbbddddedefecgcaafagaabbdacgeggaaadeafdagabdgcgaadagecbcdbeeeccgfadeefeddaaadaggffdgdgggfedgbeaccgcaccadggdagcdgdfdbbegcdaccefeeddeagdedaffgcaddbefbebeddeebaaacdcbfbegdececgddbdggbdefdcbeagcbbbgcgddefcedcecdggcceeebcfacebbebcccaddbeffaefaeadddbaeedccaebecbebadgcbdafbbdacfbffdefgebeafdecdccbecdefebdaadbafbdadbeadcbdegbbbdeegffabfeebeeedfdefaegfbdgddbbaeebddcdgbbagdefdcacccbacgbfgcafeegbfcgbfaadgegaccbdgbadeacdffdgacfggdaacfecffacgddbffecgbaeacdcddceaeaegeebbfcecbecbafcfcabdeggbefffagafeaccgbcdedbfgeddebeagfddagggdgadccegdbgafcfceggdeeacdaabbacgfddbegdfgefgddfbeeaaebgfadfbabdfdfdfdbbfcddbdaddgfdebdbabaeeebefagefbfefbbbdbgceabebbcefddffaaafabedfcagaccdgcedcbbcecbddacceedddegabffededbcgaafafbbcfdffbgadgeeabgbgbfggcabgeeadadbddcbafgecaacadfagegdbaagaddbfcgcdeacaefaadbgfedcadabddafcfffddbbfdabbfcbfgbbgdaafcebecfecgeedceagfbdafbgacagabdbdeggbgedddgadegfadeebbceffaebccadabgbaabcbdcfegdecgeacccgeeefgdebgfegbbcffebcebacbdgacafbgfcgaeadadgafcdeaaadbdbdfecbfdbbefffcacedccfggebfebefcceecddcgdafggabbebacegbfadebfdfaacgbcfgacgfbdgccggeafdeegacdeaeaegcccdcfffceabddeefdcbccgbggbgfddcdebageabcdcdefdebbafdebeadcafdeegcbdbaeggbfdaagffbbdedbafcddddegeddcfdcfecccgcfcaecabfbgcgcbdcgcgegfdgcfaacfbffgfddddebdafcbfgdadcdegbcecedfbccbdgddfefegefaedcaafbedccgeccceefbbbeadaaegbbaaeccaaebcdbgdffbdeffgddcaeebggcbbdfbaecbgcaadfgagffgfdaaccdbfcgeeeaaafdgaaeebegccfeaaaedbbddegdccacafffgcbbcdcffdceeecbfcbcbefcfeecfgabeeecggeababegeagefaaeeeefceaabfabdagcaefeedgdecaedgcacbggcddbaegbddbebafcgbffdafdcgfdedgdecdfadfgdeacgebbbedcgcaebdcbcecbcfefbeadaggfgaccbeabadegdaagecadfecccedfacfggfaagfcfcggdcbcaafgecbedbddgbdcfcbeffefeafdbccbfbgdbfdfebcbdbecgdbadgagecffcdabfcfbegggfbcebfcgbfcbeaadbbdacddfccbgabbcbdfbedggdeefdbgdcfeefbgbabbceadcbedbafdbgaggedcdfgceafgfcfcbaeecfgdgaebggbgecbfcdfffeeeeabeabacebbdecbgcbebeeggggbbfgabegadfgefacbbgbdcaggaccffaffagdaeggacedcaeacgedaabeebgcggdaafebdebgecdaabedcebbbfaddbgfdaafgeeefgdeaeeegcbgebfcfccefaedaccegeebecbggedefcegaedfggcadgfdfdgacddbbeeddbgeefbdfadaeacefcccgddfbdecdfgcdffedadgddcgaagaabcecdcgbgfaebccbdgebdgbbfefdgadcdfafffcagdcfcbaaeddabagdbbcfaccfdaacdbddaffccaabadababeagedefcebaaedgbdaeegcfacccbcafefdfbfdfdebbecedbbeagaagfacbebagdccgbaeffbdccfabadfgbgefcffdagagfcgfcaebbfaceccefdggagacbeeabfgcebceebgcacgagegagfcgcagdgafacbdbgadfabfdfcadfbcaddedgdfbcbefbgffgeffdfaacfgeegfaceedfefbgbabacfddbaaefgaagbbaggcaafgbdaacgdadeaeaedeaaaedcdbebbaabbecfbgfbdcdcdcdabdfgaeefgbbaddggcaageeadacfagaedcafaffacbdecgabcccaafbcdecgcggaccededfddbdafffabdgaggbdafdbgccgggefedebcgeefdfgegdfdeegegcddeegcgfefgfffaacfbabecaaccecgaaddaafdbdddacbebdaccgbbcefcbcaggdbdaececdgcacgddedegfeacfaggffeebdfdeefebgbccgbbbddddcbbffeacgfcaaeddfddacdbbbeeebeggedebafdbcefdegbebfdcfceffcdffdcgaadbacfegggeddeagfgbgcebggcecefbgcgeccbfgdbdfcbaaaagbefdcacegaccgecbeaccaecbgeggcebfegadcaegccdaaacadbfddfafeebegadbbbggddbbfcecdggggdcbaecedbgdaeaegaafbacgabaebgceebcgfebdgeegbabdgaccdffcgaacgabcbfacdfgcbaeaeagfbcegcgbedagebegcaceagdccfdbfgceggagfbccabgfbcaaagbcbcafgbbecdbacgecbagcafaaefbdbcfbcbdcbadbffaedecabbagfdcgfdbgaacabbeeecaeffggaaeacaacagdgbefcacfeddcdedgabceecgegbgafddccaddgdfaaefbefdgdabdcggafedaebdefgbcdegcgafffbefdefabdfbdebdceeadcdfacgdacfcgdadfdbgabddegbbbaeafecfcfagdfcabbgdbccecgabecfccedcbfebcgdgddcfddbfddgffdfgdfdfedacebaeccaaddbebbbfdeeaeabfcaeecgagaabbfefaceebbefbcbddcbfbdedbbbbgcdbbccceddbdaaecgfbaddeacfbdbgdgbgaeagddgffcaecafaccfgecffcbeafbdffceedgfdfcefabdbbdgfbdbgfeeedabeeccfdbbfaadcgfddebgcebdgefdgedegaacecabcbfgfegbffggbcfecegeedgacgaabgggbgeedabedbbffcfcbefeafabaeabffcdagggdafbfefeffcdecdefbbegeeeafbgddcdgafbedcbccgaccfdcbadgccbcgbfceacgdgggeabcfddddgbbcdbfecdeeabgbdceegcbedfebdagefgafgdabgbgacfecgfbfefgdgdbeffbecgbbdacadceddcabeaadcacgacbdccebddcfgcbaggafcfdbffdfbfffeddacefeeagaegccagcfabfbbaadceedageeaefgcfdecbfgcggfcgggdgccgagbbffgbdfagfccaecgebbaegfeddfbecbabbgbffcfbgacdggeeeaeecebcfacbccdddbafabbdcgbagcgeedgfdeaeaabefbgcdfedgcccddcbgeagfgfgbafaddfbbcfddddfceefegbeacdfddfdfaecddebfddfcgbfbgaaebbbdbbdeaadbgbfbbeceedcbbafadebegeedfaacebcccdgbdbefdfdafafdadfcbggcaggccebfggaedggedacdeadaeeaggbffebdbbbagdeffdeabaeecfeaecfbggebcgcdbgdeaadbbfbbbccdceadcbbaaagedbbgfabgcdfbacbcagfeaadfdcddcgcacdbebgafgdeddfefdbbfbededegcadcbeecbgceedbcbfecaecadacbfebfeafbffebbdadaafdgafabggedcgbbeffggfdgebaaebfdbabfbfcfaaddgcdbfcdeefaaecdbgcegacbdgeedggggcacebdcfbbbbabcgfdgcgbdbgeeffacfefecggggaccgbbeffbefdcgdaggaafafegbacfgbdbfebaedfedgeefefbffdefabcbbgdedbggbfacgcdbebgedgbgccgfafebddddafbgeagfgggffgdaccdgbagfgfgfcagbfdagadfdfdbbgaagggceagdaccagadcgbaffbddebdggfffbggeaecfaffggdgebeebgbabcbdcdabcafcccdcdadecdfadbgdfgceegffdabgafcdfeecfddcbdbgagadfcbfdbcdggbedafaeggfbaggdbgebefbecgeefcfcgbdeccaecebbebbdaedafgffeebcgdaedfbgbbegadbbfbgbfbbedggecbcaecfbgbebafcagdbgbcfcaacfagfdccfgeedgefdfdageabefgdccedfeffecfgafgfeecaafagdfdgbbbgadffbdbafbaafagddcfgcaeeeabaedgffagacdebdedbgcefgggegcacecdecadadfdadfcbbdfacaeecafdecdebaeffabgdcaacfgfdgeegbcdcffefeccdcffddbcabbgacedbfcbefefegccbbbggcdeaegbbcgddgcdddcfadgdaefecacbabcddeedgecbeebgecfbdffcfadbabbbcfeagdgggbbbacadccgdacebabaaabgdaabfecadfbcdadfbcdeabbggbaeebfegfbbcfegbbecgggbfcfbcgfeddgbgcbfdacbbgbfcfccbggafaccaedaebgagbddaabaadgdbbfbafbcdfecffdbedegfcfdbegcdbcfgcgfbcedefecbgadaffcbbbfccgebbacgfdbceccebdabceebfffffdgaffbcbabcbaecagcgadegefddfgdccfaagefdfcabecgacfadeaafcgbdecdefgacaabbgfedaebcedbcagfegecgcafaeagbdfbadfdbfgaecgeedgcfbdccabgafegdgaeaceefeefcafdfgagfcfbbbaadaaeceffbafggcbbcbcegfadbebgebbecadaeadgafeddccfeddcgbccgdggadcfgcdgddbabdaefgdcbfecabedcedgbfbcdfgceegbbdfacbadecfdcddfeggbaeeecgffafaeaffcbfggecdaccecdffgaeabbgaeebcfcddcdfefeebccbbdbbeaefdcaddeaaffebbeabdbbggdfaeddagfccccebafggaecfedcdageecggbcbbfeffddbbefeeefgebdgcbfbaccffccabcbfaecagadgeeacbdagdbdfdacacagdeeaaaaddebgdgefbgaccfeggececfafcacegagcfbadgaccbdaadagcbbdafaacdfgedacefebgfgdfedgadbcaaeacfadcbebcgdfacegaadaefacfbfgaebgfebdcadcfaceaeagebbbaeccbfgbbeaaeedgfgbfgdeccdgfedeccgcgabcgagfgfaaeeggbabdedffaefgceecbgegbfcdbebacgaffbebbdcceddggaafabccggdaffecadgbaddfaabcgfdbaefgebefeaggacefecfcbcggcceacabggabaadcbabgfcccfcggfaefgbeddfbbadagededbecgccbgggfbfbefabafcbaggecfbdbbgdcffffbbbgdgfffgcfebdafedcdafbfbddgcagafcafcaccbgafgggddebcebgfgbbfebeacaggbgbefbbgccdacacgcabaefceeedcfgfceddadfbedcdcbaeeccbcbfbbfbgacbfgacedgadafbfgebadeecdcdbceffagfgefggbabdeccebffeafbbaabdgaefdbecabegcdcaafddafagfefffedacbbbdacgbccdbabdgdgeffefdbbgcabbcdbgfdddfgadbbefedddcggfbbgbcacabadggfeedcafgcbgdgcgfbbcddfbedeeeddcdfeaddbfbbgdgabfbebacgfgbgfdgafeebadcfbbdgeagbfbgefcfbbeebbdaacgeffffdccdedbdfgbacbdegfbdgbcebafgdeagdaedacdgcgabcdfecddgddadefaabccdafebggbcaadddcegcgffcgabgfecaceefefeggbcffbegbeddgdcgebafaaccffeedgafbggfecaffcbfadcdegaffdbbfcegcadgeacccbcgbebdefcegbfecfcebcdaffaddgdgafegbadgfddabdcebebcaebaagdegeegebabgcbgceddbeegfdeeffbgfdccfgefdgaaggecbeddadgdfeaaadbdecabeecfggbecaadbfebgaaaacfffcdbcggfabaecadgfggegedfbgacgefggbbebgagadadgcfdcdegaacfeacafebgaegdcbdcegcdddbgfcfdeacfefaefgdadfaeaccbggffaaebdfgabdgeadadefdeeddaedebfddbdfdbdbfedbccgdecffcdcdccdcdgagcfeaeecbgaffbdfebecgcfcbgadafbgfadbfcbbacdffeecgfegcgaaacegaddedbbcedcdggbgaecbggddacdbcccedaebgdbfgagbccacbggadfgaabfbfgfdffdffffaffcfacccbcbeaebcddbdggbbgcggdgggbagedccbbfccdfbfgfedfddgbfagbefbbdadddbfadfdagagfcddfbdbabgeacebgfggdeegecdacbgaddaebfacafgcgfbcdeafdaaebebdaaceaaecagfeaegafceaadeabcedgefecdfgebdaeefaabccbdgccbdafdegdafegdcadabeebgagdfabdgcdccegdgecbbadgecbbedccaefegcaddcfdcfdecfgebfcegacbgbdcceecgfcgegcaeefdggdedbbaacfagcbaecdafgagcbdcadfbffaecdcgacgeefgfagdadeadfcfcfbgfcedafdfcgebcgaabcebadabefcgdeaeccgadggdfageacbbcbadfebddcfdebdaafaaddfbcbgddfccccefcfdgaecaceeggbgdegedaffaabdedbdfbbbgefebbcbaeaagegafgcadbcacfegcagbfbgfgdfeecfbabdfecddgddaeacdaabgggagafafdfafedgffbeeeabaaccdfafbfbbafggfgbgaeaccdabadcbabbadbbcagceafbedadbfcccfagacbcfdgecggceedbcbdfgbacccfadefegafcegbdgdaebeecgcbfgeefbccgbdaceadaafgaegfebfcdfdebgeecdbedddagegcdgbaddcgaacegcecfefbfaababfffggefgfeecfcbgcccadedggceeeedfgaccgbdebdgfdcfddgggfbaaeffgbgffaafcgffbefgccecbcgbabfedgdddgadgbagabcefebcegdedbaeffdcegdcgefgbgbabfecbccdfebffggggegegdeefeafaaadfffdeebfceeecgcgfbbfegagcgeebedfbcdbgdbdecfdacbfdeffedgfaffeccccecdebafgedgggfcgcgaebeacgdaeccbedgccdfggdefebaaddebcggdggabfafbegfecaffbcdgdedgdcgbfdbbbdageeeadcafffbegegebbgcedfcfacefbfdgfgfbdeggcdeccdgdbgfdgedecbfaadbcbfgadedfgbdbgdcfddddbcgfggdaadaaddbdbfdfgbgaaaggefgfdafcdgcddgbgecefdfcfagbbafbaccfbeggefbfdcccgfagccfbgfgbddgbbfabeggdbcafgdbddbeabdbagfdbffcfedbfacdffffagcfcaegafffgcecceecbbgbbfadgbgccdaedcfdadgggdgddedgccecfagbccggaffedcfaebabefcgefedgggdcafdbgcgagcfaebgbgabfeebbaacfceefbbgebdcdeaafcdeffcdfgbegecdcgebadbfdcefdcaaefbcbfaebegggadfdafeeabeccabcecbgdgabbbfaabacdeeeaagfffbfcdcbegcdgggcbecfdbcbgaeagfaddcabcfaagffbcdecbfgdbaebacgagbdfdcadagbfcbfcfdbbeegcadebedadcaggegebeefdcaabaefecdeabfccgbffffffgdgecegfdcbdagbbeccacegebdedbbfafbbbddecbadgcagafcdcfcdgfdbddcgacbgfbacccebabdegecedgecfggdggfgfgcebffeceabbcbcgedgdggagafgeeegdgbbedbdeaafccbfgdecaabaefbbdecgggecafdacgfcacbededeeegagdfdecfdcbbdfffbdbedaabddbfcbdedaefcdgdfaafacdbfebddcgcegabffagfbbffcgaafdgbfebdbfccgdefcccbecfdfacffabaeaefbbeggdcagbecedfafggcdaedbabebaafdaeaffgdbcgggcgeafcfgdgfdcbadabcfcafbgecddababfffeaceaacaeggeefacgebfdgbedafccbfafebdgfggfeecefaaacbdgfacbbdfaddccfadbfddffddfbgdgbcfaabdbeaddeeedebgddfafaeebaabacdagacaaeeffdbgagfggeacedgdddeadgdbedbbgdfbbacbagbabeeegedgabbabgegbcefadadadgadgfeedgddeabfgbbdcdccdcebdagcbdddbdcecafdgdbcgfdcbeeedfdebbbcaeccgffdgfadfcfafafeeceedeaagggbgdaefbfbgaecagccfdacabebdcdcfeeddcgadfbgafadegcceeeggcedeeeabededcefcegcbgdbfcgdeaeagafdacebdggddaabeeegcbffadgeaaeefeebagcadcefcdbbaddbcdgfegaafbccfbcbbbffffbfdecfcdfgeeadffgcaeafacccegabffagbaggccebagefgeadcegdbgaeeedbfdfdeeaeefgfgeceddafeafecgeagcdgcaebgfgbbfacbbgggfdcbbeaegggdddbddgfdecaeddcbebeccbbegddefbcgbabebafgbebcfacegcdbgffdaafffgabbdaeaddgbbfabcgbedbbdbdeeccgfffgbfaebgedgbegeacadbeggcgaegbfgffdeggdbeaefdggfaedcfbeeccfbeddecdcfffbdaeedaaeabeecbcfafcgeegbcddfbegdcgcacdbaeabeadfdgfgfacfeacgfagfgggdgfgcbedfgaaccbdfgfcgaeaafgedafceeffdbfeafcgcdgabbddbaecegeccdgaacdgfgdcbgdccfafffccabccdfcggfaeeaggbaccaaddabdfccacdaegaaebbeddfeadfcfecgcdaecbdedbcfbabebefgecaeefcggaeebebgfgfbcbebgfagfccdbbfafafdcddfeeaadbafcfbdcbccabfbefedggaegaceagbdadfbgegcfbebbebbcabbgdefdaaaeebgcfcfbcbbeaddebbbbbgbcbbddggeceffffgeefebgfdgcgagcggcafbagfcaaccgcbfddfbadabdbdeccdgffggdaebfgdegdfgddfbebfcegefgaaacedfaccadabcgdfeffeccfeggdbbgbbafacfecefcccgbfcfbfdfafcddfceegeecdceacafcdcfafdadgdecffdbeaebbagdffcbaaaagffcfagfafeaabdaebfdbbdefbfbgbcgcdaeecagbcagdfddfdgeafedaacadfaddeaaabbgeggbgabbgegeaffdadfceadecdfdddgfecbafecbcdceabfgbdbbeagfagcccgafcgfeffedfdcgcgefaceaegbgffadfeebaefeegfdeaebfegcbbedfddabadgfdbgggcgabeadefdbafcgcaagfgacdcdeagadfedaeebcbffbfbbcfddeecfbgggbebfaeecbbcegccgeebceebaggcadddebfgcgecbfbebegbdbdedefdadcafeegadfgcffaaeaagbefbddagffdagaeedbecbafceecgcedefeaeedfedegffabdedagfdeggffgdfcfcffebgeafeadcaeebcgbebfggdbgeababaaffgadceefbeeddaffgadedfeffeebcbdbgfdcecgcdfdebcedcafebfcdgcfgagbafecbaeecaaccaaddgfcgebbgcddbagcgbfcfdbdafaefbcfdcdcgbffagbbagfdcabaaeeffcabcbaaecggaceeggbeededafacedcdgafgbdbdbacdecdeeeafeeeaafbadfggegfdcaggaddeabcbdcadaaadaecegefeaddbecaccagfbbcebdagdeagffbgcgcadadbbcbbadebdacaeeadeaebcdbgdbaffgbfdfagacfgaebcedfdbbdfebdaeedcbgaebggbdeegebafbaeggfdfaadcdfdaadadbabfceceafccgfbdaedbbagccdbafcbbfagegfceedcbefgaaegdbeadfdbbefabbggabafaaccfagcafecafadefgabaefgecabgbgdcgbgbfadedgdaccgafafbgcfabegabfbecadgafbababacfcbbbgffaacacdbdacfbfdbfbfbceffbbeffddebeeeebebfecfgcafdbebggdagdcfebceggcdggdagfdgaabbddbebdggfegaaggcfagcbbfegebcbccfegbbbacfgaddadefcgdeeggcddecacgaebdgbedgdaebeafedeeaddeabcdbecdaebdaadcedgafbaadbdbebfadfaccgecbeebaeadgcafecffgfagbdbfdggadbdegdfcfddeeeebbdgcfgcabdegdcgccfcgdcegaefbgadcadfgedacagfcegdcgfdacggggcdcdaaedabgcgcbgdbdcafacbfcgageaefaedeebaefcfeeeegfadcbebfeaafcefefeaebfaccbefdbdaedddcfacefcffaefceafcadefcfgcdabaafbbefafcgabdecafcfedafegbfdgfgdcgdbeebbaccfegccccfgfccbdgddccecaagccbeaegcaafgadbaddcbaecedgacgaggaebacdaeacadaccafbffafdgebcfbbbfgdeegcaddgdbcabgaeceeacfdagafceeaafbfcfdbccgfdcfaecfcafcddfdddfbbccfcbefbdgbecdgbafcffgebdcdggaagddfecffgdfagcaagabdeccdagdcbcgacafgacdggdcdeccagfeccddbegfbedfgabgffedfafecgdabdfdeddgbbbgcgcgcfacgeeffdabcfbgabaeedadbcacdfefebafeecgedbefaeedegcfaefbdbegdbacccfgabeddbgabdffaacdeedccgfadecdbgegeaeafabgdcfgeabcbgbafdaaecgebdggdecdcgbebgggcegdeaebffacbffcfccdgadfdfebeedabebccdafaffdeggcdacdbeegbfdagagaebffgceddafdeffageddfabdfgageccffffcdefbffebgffgccecbffefbfbcefaeabdadacgecgacebgbbfbdcabegbeebccfaagebdgcbfdfccdbaagfaagffdbfcffggeeefabbdcbgdafdeaafgdggcbcdagfdgaeabbegeedaeabeddacgbaggcaafegaebfbffcbbcffdgfaedbdgebcdfeedggdbbacgecdefgdebfcegacbccdcdecccabbfagdafcaaeddefeeddgffbaeccdeggbccbbedgdcabaebddgegeabfdgdgaagfeaagdcggafcbecgaebdbbfafafacefcabbeceaadgffcbcdcddbdedababagafabgdfadgbbdcefccacfagegfceggccgfaggbbcceccgfbgdacdadbbfagfeaddcdcfbcacfceabdebdegacdeffgegdacfegdafgbafeafcfffbdcbgebcffabgeedfffcgegdaecccddfadbfgacdbdedcfecbaeafebeebfeggdefcdffgebffagdeddbcgcdbccdfbagfgdbbgbcdfdbgeadbdbbaffgbcbffegaecaefdceebeagedefdebbbceaadgbcggcgcgeadgcffgbcefgccfaadeefgbcafafbefecbefgageccdadefdgbgeaaabcdgfcbebaaffedbffecddaadafgcgdcdcedefecgagbbbcgedaddgbdgdabcbafeebfggefagdccadefgdebcgebedcbaeddgfbdaceefggccdcgfddefdbbbadggdeefbdcgbdfgdabdgcfdggbffddegffffcbdgaadeggeedeafdaaebcgafcfcgagddgbbgfbgaacaeceebgfdggcfcdagdbbfffgfddbcagagdgbfffacebdbdbbebgcgadeeeeeggafbafcaebgbaeggfgbgedgfafcfdgcgabegfcecgcddgdadbfdcbbgaagacaccdceaebgddabaebbdddgdgafcdbddfbgbbafcfbaebcddcaeadbadcegfacbacbfaaebbbgdbgadfdgaagbebafaddadffbgcfafeccffgdbceggbbfgbcgdfgdfcbfacaegbabdagfdeeacegdccfbdbcdbbacgefgcfcaeeccbcfdbbagddcbgcfaefdedgfeadeebdcfbddffgfgcfeagffedcefcccgdafacdfebbgcgfabbcfgeeebaacggfddfgefabbbcgdfaedbbbebcgededbeecfdgeeeccbfbdeefbfebbbeeebecdcdgfcfbggbcgdaadaffedfeccefbdbaddfbddadabcdeefeaaadageadbbfcgccfcebafdbebdcgcfgcaabaddedfagdbbdgcddgfgdafacfaebacfaabdeaggfeffgdedcbbedeaacbagbaffacfdfcaadcffbcadgaafecefbaddffbfbaaedfadgfgfeecddadgdfcdcbfffedbbaeeeedgdccffgddbbdbbfdaedcdaceegbgddadedaefdefaeabbgaadgdgcbdgdefgddebfaeedbedgeefdbebedbdefagbefeefdacbdgabadbcgdbagdecddfafbggbbgfedaabbgfbabddgbfeeebcecaacdabcgfceafafegfebgegadecgfgeeeefbfdgffabggcafeaedgcbafgbaadegecgefgafdbgdccadbfffdbgfbcedafacebfbgfacbbdgaaffceecaegffdcbfagdfffffgcgbeccdccfadddcdegegdfgcaacddgdddefadcefdcdfgddfeddbaaaadbcacaeababbadcegfdgcacffgddcbaacdceffbgadgdeefdcgcedeagafadfbeacfeafedaegecaggfagbcdbddbcaadacacdacgfdbgdaafegcecfgabdedaedebdbdbdagbgdebdebfdbaabbffdgdedaebgfaffgefdcgddefccdeaagffbfgfaacbebgcbcgeadgfabcacdgcbafcedeccfbdbbfbdbebdabefbeaeadagfeceaefdfeeacbccgdacgdgfbcbcageggdgdgfddbebbedcddfdgdceaeccdecdafcggdcbegbdcecaaabdgggcdegdcedeceaggbgcbbccadgfbfbebaccbefbffaeafabeeecacfdgbgfagdegecdeeeaebgdedcbecbbefggeeacacefggcgadbcgaeedbabdaeegdcdcfcefbgbeaeaeadcfcggdeaeaffaggdggagagdgaagbfcdaccdegdeefbabcdaaegbfgegefdgddabaebaegacgcddefdafdbcfdgaafbdedgbebcgfcacggagcbdfbafgaggecfcgefbfbfbegadabagdgdggcebccdegbgacfeacagfdcdfcfebgfacfcgaecfaefecgfbgaacbfeegecdbbffagdegdgfeafcagffeefafaeadacadagecfgcddfbdfefadcgbbfdcgefcdegaafebdbddgcecfeggfcggbceageffcfdabgcdcgdefcgfdddbgcgegfgddabgeefgedgdegdcfefddbccefbebegfcafbdafeeggeagdfffbffcecbdfecgcefeacccdadgaeffdgddabefegecgaacgeeadefbgdaecbabaabfecdcaegbdbacdebgadbgaffdadffcaedbfegffggabfdfffdgbbegdbcgbdebagacbbgecfffcfdedecbabgeeafbfgggagfgecfaceabfbaafcgegcaecfdafgfecbgdgdbefgffbefgebbaefecfgdgcfgeefdbegddbdabeccbfadddacdeecgcdebgeafgfbbfdbeeffeaeeagdgbcagbdbeccdedgegdacbfcfdbffedccageccgceccbdcbgedddefdcaaebgabcebedggdcccdfcegafdffgcbgfbgeaebfgffeefceffeddgcfgcbfedeaebdddddcddedbgffgbcegdgbeebegfggaedbfgfefgddebcdabcafbaffdcfffegeebdeccbfbbeafccadedacdeebedbbebbfgafdbgeadggebgfcfdbaggfgcfcfccccbfgeafcgafbegaeaffbddeggfbgfccdcfbgcddgeadfeeabfgdgdebdbeccbfggebagbffbceadcfdbdaedeaabebdceebdffdagebgeeacaefdefcagdcddbbfbgcgccdggfdbefbbdfacaafeadcededfbagfbdfbfeefgbbagadbcecddcbebdebgbfbgedbfdaegccebfcbcfgdabbbafecedadgafdbbgbggcecgcaggceadebbgcddgddcbaffccgdedefgaeeagbadefaeggbcfbaeadbcebegafcagaffcfbegfbbabecadbdegbdeecddaedddbdebaaedffcccffadacggecgbgbeggfgfgggbcgagbcdcddegffgdbddgbgaggedfcaddbbdagbabdcgadebcfcgaeeagdbaacfbegceddfbdgbbbcfbdcaggbdcccbdabccadegfabccgccbffebdeaeaegffacbaadcbcgagdbfdgfcfcfebadccdbfbdbbdcbfafgdedecdaeedebfbcfbeeafeaacgebbeegeabcbfgdcaaefggafageccdcbdcbbcfeaeeccaebadefgdegecefebgcebdccgcdbcbabeabdcddadfeecebaeaebadaadffcadaagcedcbegdabaggfgeeefdfbebaagfaffadebfaggggffadggacgdgbdedfgedcbdabcaebcabgaacdfgcdbdcbadegbgbceddgecadbfeabdbdddgdfdaaadedgbcaedddaecacaaeagbgabdbefaegcfecabgfgfeegfgccfabgaggabgddadbfdgbeefcgfffddbbeafdaecfbeceebggbbfdfcfacgfeeegeecdeedacbeeeeaabadeebdddbgegefbbdbcggeeeadfagbgadfagdgbdcdgaddcdfagcfgadagcggffefgddadbfdaeaebbadefagdbfcaedgcaedgbagfcfefebgdggdcecfdfgfbgabeaagadebcfdbfbagfedacgcedbeebcecfacfdabddefagdgecbecdggfabcfdcgaeeacfcaebgbgfbeacfaeeaebbcdfcfbfbfaeacfbfdbgccggfgegeegdegaeecebfcbfcgabfbgbgcgabeadbcgdgbfecaacaedggcaggadfgefdbffcegcccgcccfgbagaaedbbdaagfbaeegaeeebaafbgcdgcddcfbddaaccdcgdbaccdgcgeaadeabdffegbbafebggabecagcfdgdffbgdeagbffcadcbbggcegfdfffgcbcdgfedbceeafecbddcbdagceccfgeacdgabbeafgabcbfcebafcgaadcdfababbaegdafggdcfgdfdabgdceaddgffgbfecfegfdacfgbbgeegfbcbggaaedaagdfcffcabaaaggcbcfdbacbfefdafefadcgcfefdffdffeccfdgcbfdefbaaagfbcgcedcfedddgecbegceabfbdgdggcdebgbddafdcdcbffffccadfbgdabaggdgegcbfecfcfbfgcecdbaacgcfbeadbcgcbgdgfgaegbbcadfdegefggebbfeadeggaagcacagfgbedfcadgdeeecddaeadfafbfbbbagbcdedagbbbeddcdfbfgegbdcdgcgcegggbageagagbaebfddccageaddfcfabagbgbcaddabdbefbggfgdebecaaddbebabddaadafafdfgaaccebfgadgacddccbceddccddbbcafgeecfbbgfgbcabdgbfffffdgeggcdggdfecabefedcabdfffedbcffgdeceggfedbgdgcadacgdgbbgafaebfegbefcffggcfbfegadcbbcadcfdfdgfaedbbdbagdcdbbcbbbacaegfbaegcdcbaaffgdfecceccecccbegggbdafacagbgacgaggffbddbgaaafcaaabeecdbfegdbdcbdfedcbcbafgdcgfaffaaaegccagcagdbcacfgggcebebgdfecedgfbfgdfaebggagfggdcbccgaddbfagdcedbcaffgdfebbadebfcadggeccfbgcecacgadbgfcfaeffedfbgebegdedeagcafdcfcadfdeaageedgadfgaedaedgdfcabacdffbgfbdafdefbbeedfgedggcggbaedbcddebabgcfgebegcaagdaedbfgacfcbdcbdabdfagaegdcaacabfdedebacfbgfgabdddafecbbgfaecaaafcafefefgfbffdgfbgegecbcafffcbgbcdecbeeccaedefgecgggbaddbdcdffaagggebfcdacfccgfadfadfagaddffacabcdgaebgabafccbgfgbcgcgeegbeeefefagbfefedfffcbgccabfbfddfccgabefeaegfaeegagfebdebecdfgbcfgcccdaafedgeaedbgcadedbabdfbgeefeadfbbbabggbaadggfacccccdfaffdeggdfbaadabcfbeceabebedbbefaeecgdggfbdceebdbfcefbgdddaacbadfbedcfaegabbeaacfbddgcfeaecaffeadbgbeddcabbfaffdfbabcfeaecggeaabadedgcegaggcacbddeggdabfaabfcebabcddcfcbgegbffgaaagfdegbacbeafbfecgeeacgadagcdabggdaccbcgcfebaebedbedfafdgdbddecaecceggcbbeaebadfafbbccddebbfbgfeagfafddfcaaedfcfcafdaegcdededgbacfcdagegbaegeadafbgcafegcabdagbfgbdfafbcbgbcgbfcedeagabdbacdefbeefgddcgcdabedbcgdbafddfbfbecddbcgfggbegfeeafbggbefggacegdcedfabfddcagefafgcgccdbgaagbcccgabfcdgdbefcgbgbcbfceeabedaaccabdgbgabdeccgfaeaedfgeeffbacfffgafefeaggcgfefbgdaccbcbbefcdcafbeacbeafbagbabceagbcfgbgabbefcgbcccegeafeceeeggagaggbgegdgebaebddggcfafdebdddfaeacecbbaffbgbaagbeeadebbcfcfdedcbgedbfbceebfgefgggdcddbcdfgbedfdggaabffaaffcgdgbdcffdebecfdgdcegdececacfebabdfbegeccagffffdaagbfdadfdfaddagdbceacbcecfbebeedcgagfaggcadefeabbagacfegbccefegfcdcdededceefaefefgdfacfceebggacddaggddfddffgacccfffcgfdgdgegfefbfbbeeceafdeeccccaaedcfagbagffgbddeeggaefdgaggedecccaadadefadabfecadfaccgegdbfdefgdgdgbedagfaaededbdacfdcgadcceedcceddcccccefadbfgacafagfcaagfbaaafaagacbcbcbaddbecbdcddfbbdgcfabbcbfdgeafgceggagccfgcdgdgbaafgceaccegdgbbgadgedffggdffdbfccggebgecabfgbddegdgbgbgbacfcedaaegbfcagegecbbfaeeefaacdfacgebadefcbbbafdeegfefbabafgcedafbeggefgfcedfgadbdgacgdaegeecfgcfadcddegeabffcaadagaabegbcedeedfeadecebbcbfgabdacabfgcdcccafadgcaeefgegfcfdgefafdcbgeaddfcbcbdcfeabdbdabgfgcgbecbaaaegdfcagbfggabbabdcggggddcceccbaddfeggffegcbgbddgeebecfdfbabefdcgabgccdfgabbdfcfbbfggcdcfdcffdfegegafadaebdggadbagaafdaecbfbabddedgedbbabdedaadbgdcbeebgffagfdccegbecdcadgadcaacbegffcgadcgdacaeaaddgddgbbcbadddagggddgbdgdbgcdedecdffecdcabccegffcagcadbgacfeggbdegagacaedgfgbecgacfcgecbbbgdfeedgggdafadaaegegcgdadcgdbgdadffcdggfddgafbcgcgcffbagfgafebdacgbcggfebgdgcbcedbbffbfaegacffbcfgcbgbgfffbfbbdadfdbdagffaegfdcbcggefddfgccccddaebcbffbgeadefaggfffcbbcdbabbdebdedgcgeccggdebaecdeagebdcgbdffgegcbcefeeggdadafaeeccbbaebbdfgfegebefgffbcfacbaaefgagbggegeeadeagabdacccaaaabbcaabbbfbgaadadfbdgggcfbcefgdagbacaccgcgdaeafgbedcbcagfafbagaeaabcadfafgcegeffadbedbecgdegdgbaaaegefebgaccdddgcbfaefafgageebeeadgcbebdfafgdggbggcceeffaefcgbaebecfbbfgedacgdadbafbdbdbaafccecgdbdcfggcdabdaddafafdebeacbaabdcfdcebefbgbgcaaabfddggdeggbgedbgagdcefdfcgfgafacgdabgfaggffeafffeaabadgbgebgbbbdbfggbefbddfedggfbfggbbcbfdebbcagbfgagaagfgccgccbedecebbdebefcfeeddgdageffgdcffbacadfgaabdedcbgaaagdeefceadebdbgfaabfegcafeadccfdfcadgggddeegfcfaegfacagbdddbgcbaecdbegabefacgffcffaddbccdefecaaafccbbgafbbcbggfefbeabagegdfcagggadebdceecffgaegdeecfdbdfeeeeafdcgaagdfcbfefddbgfdecdbacbafdcceegdffdgeddegfdefbdafgbefdafdcbbeeegegecbgbgccefdfaebcdbdbdfbagffeffccffbdccbabcagaacdedaaabfdafffbbdeaccbfabgbbcddfaceebbdbbdfdcbbbdaggdcecffdgffdceeedfgaegedagcccadfacacffggcaffgcbggagcfdccfegdabafggaaaegbcbfgadfdbdbafcgebbagecfebcbaceagegcaaecabaeadacbaccdfdfcbdddccdgeegfgbbegfcegfaedbgedafagcdedfcdagaabdfdeedgbbafgafccdfcefgeagebcdfababbaafbeebegcfbcefdbeedbccddcebbfagddaagbgecafffbbgfeebedcbecfacdbfdbccadcgaccdbbafbcdedbdceccafcdaadbedgacbgfgeebcfdaffcfgcdadbdggdaaabfbacgfbffcefbbbddeadcgeccefeagadbcccfbadbacaegccgbabbaegbcdfefdeaaafecfdaacaeabbbdgfagceafbfggbfcegbdefabeeegadbfgfagbdaebbededbcbbggfcgfedgdeaefebgbebabcgfcbbdbdcbbceeedaaecggagcbgfadedfddffcaaecdcbbgcdcgbdcfacggdegcdcfcafcgfggcfafffaacecgabacfagbfaeegffbgcfcggffafgddgaffdaacgbbeeaeedeeafdfegaaaacbbfgcfbeageaagecafaffffccgcbgeadebabdgbdefceabbfdcbeeefcadfbcadbgefebfcedffeafbaeceacaabdgeaebbfabeddccdadbbfddfageggaecgcgffefedgdgbacbcgbfffeagadcfbddgbcfbggabaecfbbfgabdgfaacbfaceggacdfdcegecdgcggddgbecffdbcbefbbfgffaedbfggdddafefggedgedccbdbgedcgcggbfgbgdbbgbebcdaeeeefabdbecdfdbgdefeefbegaabacabbcfgafbggegdcfcecdecdeeegfaecffdadceggecbdbfcaegdeacbagbecegedagbdcgfffacgdcgcfgbeeebbaabbfbggedabgagefbbfafedgabceegadedbcgfbddefdaccfdddcaegaecgeedegbgcgdedcgdebdecadabbdeefgeeaeddccfaggbadadegaecaggaacaecgcbebgdgdbgbafdgbgfafbffdbfaecbfdbeeeagbfacgafccffgfccfegcgdbcdgfaecbabfafdabaaagbacbeeeeagcggbbcabcagffaeebfgabgafabgaadfabdefafbadgcfbagaaddbeegedbfcabedbfaaefggbdgcbbgcaabgefegbbfgfdcefbgabgdfbgefcdggecebcegbgegabccfcedeaddbeffgfcaaggedgeddfbdfadbafaddcggafaabcbaeaecgdddbfcadfgabdcgegeabebgdfefdccggdbbbgabeacfcgcggcefefedbbcfbbcadcbdcdedbcggagccbdgcbceffeedfcgdaeecfeeafbabeeeabdfefeadegffaddaafbfebgceaffggdbgfefbcfafacgbebfecfebgffaaagebbgageccggcebbgeebbfffdedbcbcadcfefddededabeedbddgafdbfddbbcccggcgeegagebggacaededacgaafcfbbcafdeeeeggeadeecgfbaccbbeggbbecacfgaeeeabcgcdadfcffgbbefdcbdaecegebdbadegffddbfdbcgedfdbcaaegeaafaeccfgdcagadcgfefcdebbffbcgdadegafebagafbabegdfbdabfcbcbdfeeccafffceafebfadebcdbafcceaaedaafffbegadacgdgbdefcefdadbcbdefbebgebeedfcabbacdeedegfcfdgcdcdagfbccbagcfdecafedfagecedfageabadcaacfccbffeeegcdbbeaadbcbagfbgfadacabddaggefbbcdggdbcfeggaaeeddecagbgfbebgbbdddfefbbfcbfffbegcafbfbffeebafgfgcaffadadceaegebefbeeagbdfcdfcgecdbbdeffegagagffgafadfcdfbefecdaabgbcbefeeacabdgaaecaedceacageadgcgbfebdcefggabbbeggbcacgfccdcceccgagdbgeggcedcegbaedgfcbbggagagdcbaaggedbebdfeddcfcdgfdfdgcaecfdddfbaffebfbgadafcfbccfabgfceebceacafaaacbcfdaacbbdbcdcbfaadacdcfcdbfdggfgbgcgddaaaccbbadegbgddeafadcgecedccebaddcbbcegfabbbcedbcbbccggdebffgaaccfagagafdgabbebaeabddedbggdbbfafadbeaggbfcacdbadddffadffcfggbabgaeaddfcfdaabgfeagbaadcbadcfaaefcfdcfaefgbefffdfgfgbbffddbaadddgfbbfgagffeddffefcggdbeegfgbbfcdabcgccecbedbaeafeggfegbdabfcbfcaecggcedcecgbaeabeafffacceagaeedcfbgaafcfbccdcddaacgdcbeaeeacfgdagaebegcfaaagedfecccebbagefdeeeabcdbeegbgbgcagbbcegfacggdfdedfebggagafbabgcaddaebfaedbcfdbfgbaffefbggeebbbdgcbedfcaecgfceeedagcdeegbfaggabfdbegbaecfbccagebbdbfdfedbaagddgffabdbdcdgdcfgecfaebbfaefgbbaeaafagbgccabfdegdaaeecfddfeabeecfedgafedaegabcgcddcfcfgegbegggbfbgabcbeefcfeebeebacdffefddgfggaagccdbfccdddcafaedccbgdcaaecdddacgcfcbcbfbcebeecfabddddbddaabfedbbbbegcecbgbaacfcbbbgggfbacedbgaefgebddfcgfacbefebegcabeddaedcbaedcacbfbdefdafggdbfcecaeegddagbffaffeaafcbdccdadcgedagefbacdcgadeadecggggcaeeaffbffdffdbdcddbdcfcdddffgfdgaaafgdfddgaeffcdgfaffacbebaeedadeadddcaabbedecbfcdaafeggdabeafcbadafbegadfdgdcgcdfgdcegdbbcccdbagdebebffaadbfagedfeffgbdcccebagdfbefbeebedeafaacdbedafdegeeeafbagdfedfbagaabdbcfdfaaadcbgccbebfdgebaecabgfcddcedfcgaeeceeagccgfddcafbabbgedddddceffafegfgbgagdgcbdaecdbggadeeegbgcegadbdfcedfggfggbfafcdeacaffbdfdaaddbdfbgebabadgbaagddedccaaefaadcbabeeebccgaedfgfabdgafgbfacbdbefbaaacgdaeebcbgaddbebfgegcaddacegbeafgdgeaadacbafecdagafbdgefbbfefedagggedafbedgdbeddedfbeadgebggaecacadegbffcgadcbadbdbcegdecfgcfcfffafcdfafagffedbaabgecdbgadbcafdfcaaececedfcdgedadacfbegfddggabadceafbccffbccedfbddbgdgaafddgedbbgebcadfcdbbedaaadcfgbbeeddafcfebedbdddbbbdbgdfeeebfgfbbedcabfffcfgcfecadgfeebdgccgafacedeadeecdgcbdgdgeddffgfefbadafadecceffbfabffcgfabbaaebceddfgbdcbaeacfebacagdbcggbecbefefgfgbdgdefddcbbcdgebccdacaffaabdacbdcbbcfbfbdcafcfabaaddaccgaggcdgcbacbbfddcfgdgbgdbafdafbggfdfaagfggffbcecbbefefdcdcdffadadaceedagddabfgffefdfgddgbabaaaaagdegafbbdcegcffdefbdabddbdbfefegeaebegcafacbdbdgdfccaabgbegcecgaacagcabedcdeccdgeceafgcdcfebfaeebffagdaaaddbbcffaffbddgfefddgccefaegegcgffgaccfgegbeegbdceabgfaeacggbeebfeecddeefeaecfdaacbggccfdbegggbcdgcecccacabacafgebggfeaabacdcecdfffbcebbacfbbgcdacfgecddagcbcaddbdagaeabgbgfbfffaeeagccdbbbcaedddfgcdfcgcaegceccbfcegfcddfefbfffegegaagaefgbbddaaebdabfeecaafcbcdcaccaddbedgdfebcbdagedbagadaggdaedacfcafecedfcdafgffdebafgafffegbbagaabccccgfddcgbgcbcdfcfcfbadffgcaecbdeedegfbaagbfdbadcfcecfgadbfedfebffbfdaefdfcfgaadbcgegcccbcfecbgcfbdcceddgbeaeagadbdggbgdgceddedfcgcafcdaeeebgbebdaffebbcbgffgdggcceabcgbfcbfafaebdebaegacfbgdeddcbecegadabaebaffbbaeeeceebgfgccbbeagfcdeddaefcdaeeaagecgadfabeaebbbbebfeacgbaaafaeaaacgdcgcbfedafcdebbfacdcgecdgcbcfgbdfdaceecacddegebegcgeedcgfceafcgecdgecgcfgecdcgfadfccbcdcgaaacgdabcbeegedaeedffabfccgbgecbgagfedaecegaecdbaagaegdegeaeaceafebbcgfebgddefagebadcdaadeafebfadgccffegfeaddbfgcfbfeecfdeacbecgbcgdfeccdegcbffcadbccddfcfbbfdefgbabgafddcbfcbeacafbffdafaaefecfafdabefcgbbbededacbaafagccfgfcebffbdggcdafgcgcgagaafabdgddfecfcfaaccdfcdabefegaccfcebaeabbfcddbdfbggdfedgabcdadcacbffcaccbegdgdbbcgcdagdeefgafddcfaebcaffbaebdgdcfdggcdaaagafcfgcafcbdcbgacedgcecfagggadfgefabegdccdegdgafggdeccecbagcfgcdgeafdagbadfgbfcbcgedcfdfbgffgaddcaaefeafgbbgedabcaeegcfdcbgcabefgecdgbebaagbbcfffedgeffffaaggdgdegcafegcfebadgbdbbbgaacaacaefaaagcfcffgcgbgdgffgcfceggdfbabbaebbfbeegebacfabgecgefdafbdfgaccfdcggbeacebdbaefbcgbcegddcbffedcaafgdgdacfdbadcdcdcdgbcfeeccbcgabgddafeddeddcebbffeddbfecadgfefgdccceefbbfeffeacgddbcaeafdbgabgebfbccabdffeaeebceagegbadabeebdcggcebbcddbcfaacaacbefagbaefagcdafcbbfaeecgabdfcaeaddfccfdagefdffaacedcggcbfabcgdgcagceecedfdgbbdbbadaccagdgdaegagadcafecbeacbcdcgdeadbggbceccegceacdcegdgeecacggfabbgfbaffeaegbdfceefgdeaddfgbcdcbagdddgceagabbebefebdgfdddaegcbacggcacecbcbcccgdbbaefdcbdccfeabecbaeabgcdeafgdfeggeabfaaefdcadcfdafbafdfdccfggbcgcbcagfdbeadcaabbfabedefbdcfbcceabggggcefeffgfdgdecdabacaccgbfccefagfebebefceagfcccaaaeaacfeeffacfbbbfdcdfffccadgbecebgbfefgdffeegcedabcgeeedbgdgdbdgabbbeedgbcfaabafcbeeffcabfbfddacaebgbfdagdgfabgfgegcabfedgfedabgdgbfcaaggdfdbgegcecaagagbccdabbbecegeeebfbgfgfdfeebfddaebdfdgbbbcebedbcddeeecgfdabbebegdbcffcbdddbbfdbfcccdccdebdaccaebfcaecdbbecacedcfcdgbgaddecbffegbbgaefacaadcagfdbefgffecbcedacbfacddadabagcdfffbdcbcbgcaccfddgcfggdfggbgadcgcddadaaeffgbbddffefbdagabcfeafegadfffggabcedbeceafdebdgegaffcaefacdadgfbffgedcdcaeaccfbfaadcbcdgfcdgfdagdbgebbabfdabbacfbcadfdfffeefcdabadeaefbggddggbfgggecedadaadadcdebgeecdbdcfbgebefbacaffbeeagfdfagfabgcgfefbgfddgffdedaefgedffbeacadbcbdfagaddbeedcggdceegbeegefgecdgagbbdfcffgddbcebcgfedcdecgdafaedceffbgeeacebaaddgddagbagagaafcfgbaaddgcdgedbebfebdabaegaecadfaedcdeabbcgbggabegbcdadffaadgfddegbefbafgabefgcgddagdecffbadbgdfecdagdgbbfgbfbedaddacceagbeebaddcfbdfdaegedgagabbbbdfccabgbgfagdgfcgebgbceecggfbbccgfgcbgbefbacdcccefafgdfgbdaegeegegedebfecadadgfgefebbfffdfcefgaadbabeabdcgefcggfedcgebcbddcddcdcbccdaefddefdaafbdfeggfagdceadegbegbagbaeabdfdaagadaeecgfaedbebcefdcgcgfbgbebaggefagefcfbafdgaaebcdbfbbefdacgbfadbaadffecbbaggagefbdffdedgbeebcdgbdbfdaaaadgeabfeadefcfccggeadaafacaadegbdeacegdedfcgbccbeefadcbdaddbbdfceefabgffaggeagggebcagcddfbadfgfbbfadcgfcddeadfeaeeefecebeefgbafggcgabcabggggbggabaacgegadbeeedegcdeeccgedafafcfgcfebageebacafgbfedcbeaadbdaagggacffcafefegbeggcdaefgagfaecadccdfgeabfeafeabbbdafegebcffdfddeefffcacabafcccabfgadadbdccdaabeeegacadcfdfegfcgbddgbffgbgbegbaceageeaedaaecadbfedbbgaecdcafffgedfcbeeacdadacdgeccddffbacfbadbaedbcbcddgaebfgbdbgggfgbeecedcdabcgebcbedbgcafbccbfdegbceecgddfcgbbbafgbcgdebcfbacfcbcfdegcdddgegbfcbebeeefgcbacededgfeabbffecgffegbeeeafeeeacbddeeeaebddeddbbabdefbaeegccddgcgefgefffgfgfcedafaabeaccffdbbdaaceaafcacbebcfbcfebfggebeagbffadaddafcbaagaggcgdcaaedgcbceecgfcggecfdbadfbbbddceggaaebffaaggbabdcegfcagcfbfegbaegbcdadbadgecaefcbdcbdffbddffagfbgafeccagcgbfbbcdbcegaccbccccbdafcddegfgdeeeeegddecaggfabcfafedcdagdbfbeaacgagfedfggbfaegcdcdgageeaafggcffdgadgfcgaegbfbfadbfbebfafcbagcgccgaagdeacdcfbcecgeddaecceefebcacgafcdedbeecbcbcddcfedabccgeafffccaecabcfgabfceaadafefegddeeacffedabfgebacgdgdfgccaacggbfaeacegefafefdffbceceefddcfadceaggegbcfdagfadgfdedcefebafbdccebbcggacgebffcdgdgeddgadffaaffaedefbfgggeebgfaffdfdffefefebbeabaegadbaecfccaaeffdgagcabgbcgacagcddbgcffeccafeaabebeabbbefeaffbbfeddbbcfbggfgecgaeaegdcaddbfcfbgeceagdffeagggcgdfcddeffbacbebefdggdcbeabfaacfebaegfbaebagdageedfccagacfdbaecbcddgagdcbecbefegadbaaebefccaecffgadedecbefdadcbgabcbfefdabecfdcfbcbabggefgfdgcbdfabebabedagfbccefgggcgacbgdebadbecaagggdadafaaedfbcbfdedecbegecdbcgbbdagcecggabbgbfdgdcffeaegbbgfaebdfdedfgabaaffdbfgaaeeagcbggffdedbgacdgeaafbfcagccfbadgeebffedgedeadddaedegcgecfeaeeegfbaabcfccfgbfebbbeabeccdcccebfggdecfbbdabgcaadgdgbceeaeabcadaebgbdbfdeaafbbaecbeffdagbdgegafdbadfefcabacfacaggececebffgedgdefaebgcaaacdaadgebddecfaddfdggdgecgcdbafgcabagebecaddfadebgbgddecbggdfdcfgafcafgdcbfgbagcaacffdecddbabfeabgecgbgeeecgbgabgdgagbefaaacdaeaecefaecbecfdegfecegbcgdccdedcdefcefeadaaedbfdceaafefbdccebbcffdebagccbdecaffddgdbffbbbefbdfdbbcdgfecbbdacgfgccagaecggegggdfffaccaagfagdafedgbffededaebbfbdccfgadbcegbeacdfdfaeacgebccbegcbbfdgcfcdfaabaaeggcaaedfgcgfabcgfedgegggggbdcacgbgdgcabbdbfgbbfeegdeeebefeadafabecfdafgggecddbbbaecebbfaffeaaedefgceagbdadaccaafcegaacfcdaeaddfbbbadaadebdgcgeccgaagdbadabbecadffgefecfbafgcefcbbfaefggbfacbdfgdgffbgcdfbfgbadfbgfbfadbbdffcddeefagccaaacgfgcceabccaabgcdafgbdgcbefaggedcffbbbeaedfafagdcbfbfagcegecgegcgbgadgcccbgdeagfgbgfebegebffcfcbgbbgdbeceaaeefaaffdgdgbgfaggbeegeeebecbcaafggfaecfeagedcbebgdcbagdgafdbcegbeeffggaccdbbgbaefgeabcgbbcefdcceadbddecgagaedcdbabbgcgdbbcegcgadfbggbcefdadgaafgedegeeeadefcgccccabaccgcdbbbebfbgccdgbfgbegbfdbdgbbcaeeaegbcbeffdebcaefdaeccdeeegdfaaeeeaafcdccbddggfaefcebcfdecebfbcebaafgcgeegdfdgdcebaeaggbffgecebccfgcbgcbgfafbgeeceefaeagceecfcdffffccabeeccebdbgbedcfbcadffceafcbffegaccbdadbcgdbeafeafaaaacfbgfdaadcgdabbaccffabgabadgbecdefaccdaadgfbdgaccbfcdcfbddfaeaffbggeffgcceddcbafcaagfafecebgdacdggfgfgbdefbacbaebcddceedfgdgeddefbecdbceacccdeeefebgccggfbfgdbcdbcgcdfeggfcgbebfcdggadedgggdedgcfcdfccgcgbbaedeegadcbdfcdeceaagbdfccabgfedcdeaacecaebbecegabafdcbbefaaadfeegacgebbggfcfbbbceeaebabfacddcacefabdebdbbbfbfdcfegbddgbeebcaaedfefdeddcfbcedgabfdfegfeffcbcccefagfgcfgfegdbbcdcggdggceecdafaedgeaabgcecgbaggafddgccecafdaeaebbagdfdgfdeaecbggedafcagccfgceaefeafddbgafgbfdgedfababaefdceeefgefbffbfdedbcffbcbdacdcefedebaebagddgeafaaafdgcdgaebdgddffgebdfgafedagabgfgcgbaeagebfbbcbgdccbfffcacfgdacbcfcdeecafdefdcadbaeaadgfeecfcdebegfdagaggdbgcfegeaeadgagfccacdccceagabaegcfdfcffeabgdagbedbdaagadbbfgcdgecgbbdeabfdagdaffdeegdfcfcdffaeddecgccgaaebaaceaacdadfceefdfddbgceffaaceceedcbffagaccdfceafabdeaggbeegfagcfeagfcegdcecgdfadfdedbebfgbadcdgggdbfeaeabacfcaeegagbbaafefadafcdffaggaddeegefefcbeefbbgbaeedbgcaceeaceedgceebcafeadbegbabacfgfcabfedbgcebceaegdgcbeebddgaeababefdfgdeafcabbbdgfdabfdaaaaaebdgbfcfafffbggedebfabbggabcbcadegcdabeadfdcacedaccdgcacggadccfeggeacbcgbaebbgdcgadgecefcgbacaeecdaeadbbeafgffdbegddaddbddebfgggdaedbafcdedccfgddegcgedccfgabdgabcccbgegddddggagggdcbacbeaagcffcdcffgcfccegfbbfcfbfbfaggdeggbgagdbcadaegaegdegabgcbdafceadffacfaeeacdgffafceaeeffdeggfbdbdaeffgebcdgcbcceadbcgdebgdcebdgdcdbgadgbfcfeegbfacccabggbefbeffggacccaagbadgeddfbebdffbgebeccfeaadafebfdabaebggdfddafdacddgdaaddbffabbadcfdfbcecafcedgccbbcgcbeaafaeedgbgggbbdaeadcfcacdefgbcgcedgffaecacaeeggggcabgfbfcbbbafgcbefgebdfbdcfffafdefgbeaeabeebffegbedcbeeggdceeddfgccbeecdeecdeefgfaffaagfdffedbegeabdgfedcbfaacddgefcgecfdfcadcbffgffegbbgabcfefggcbdbgcacfcgecgeeeffefdegbagdgacaagcgaadaccebcbccgccegdfbbcdcefdaaeafeeeddggcbcdfcdcbbdfcbabeacebccfccecgffgbeagbccddacceacbedfefbefffgceaefafdgcdgbdafegaafdcedgaabdddcadcfedffbgacgfecfgfbbefdgafdcaaebccagbegedgcaggcfddafcccfdcbefefbagbcdgebdabgffgfcbbgeedagbadgeddbbefeaafebdbabcdcagbgdcdegfaccdffgdbebcbccbaacedcbgcabcfceabcgfedfafdfdfeggebagcfbddaaaaacffcagfcebfgecfcbgeacfefgcggbbbggeedacbddbaffecffdceffdfecfcbeacebdcgeggefgefcegcffbdggdcgecccbffbeacfagccffeegfcefbebacgfffegcbdfbceebgfgebgdafgffcdbafacbbfefcffafgfffgfedgcbfdbbgbgbcecbgacdbcbbagceefcccaddeaaegebfefgbgaeagbcfbcdfeacbaedfdfbfaeddddddeefegdcgbdcabcccbgfafcddedaacgcbdbadaaeeaegfceaefafdegcceaccedgefagfbbaaabedfgfaebbadcgbdcdecdgbeddfbaafafgeecdfecgcebafaacdacabbbdbccegcceefbbaefggfcgdcdaaadffbedgbfdfdgeeagacbgaaedfdbacdaccaagfaffcagcbcfdbagebgggaaddaegdefgebfdfebadagacgbaadggbbgdccbfefgagfbegadbbaegggcddggfccaefaabageegagccgbdafebabaadfegfebfdfbddagbegfcccedfgcegacagbacbabggddadfffdbfgcaccgbbfbbfcdfaeffebfebdagfgeecgebdbgedabfdeefbebbeabadggebeafcedbdbdbegcdcacbbbfadgbafbbedcbccebeegcbafdceedgdebbagacdadfgbbfeadefeefacggcacbbfaddcfeefedgggbdeccgfffdafdbeebeecfbbcefbcgdeceaaeafcdgfdefededeafbbaagedcaccdcbcfdcfacbceccbbgccgafebdacfgccgbdcgbbdggdfffbeaaffeefegbdabfceeggagcebaeebcgdcdcgfgddgffgcgefaaggfcggffeabafggaagddgabcdaeacdeeebgaceafddbgdcageaddagcdgedadgdbcfdafggdcgcbdacegaggggaffcegfeedfdbafcaacadcebebbbfeggaegffgfbeedeegeeegceadedeffbffgbacadgcgbcdbeegaadbfaeececafbcfbadgbbcbdcaeadccadccdagebebecbdbdgeeafgadbagbdcadddebdeebfecgcgacgaaeefgegadgadccfbcefffggcdccabbfbafeefeaddaeaabegfeafgedefegfbfgfdabbagdcdcbcegbeabbaaaafebdfdcdcbfadfdccaccfbddcbefddcgdbdgbgaegebbdcbbgabfgbfcaeabbcbgeadaecggddgcdbeaccgacbdaffgcbacegbedfcacgbfdfgggbedcfefdecdfecbeaafdbaacedcfcbbdgcaaafeeaafebbfffacfbbfaaaggfcdcfeddgegfdcgdbegebaeegffeefffbgfcddbfggdfdggcbfaagfcdcfcggedcdfeebgcebdbaabbbfgfbbadbeefeebgbbdaafeeegacaebeabbgcffegbagfgddbgcegfegfggecaafffegedfffaddecggebdfafdcggeccbbggeffaabbdgdddbeegbbcdbgeadeddddbgdebfedgagcccffgdgbbgfdeeaedffbcfbfeggdbfcdaabfbeddeceabedaceagebbfbbccfecbcebdagfgccbdcbefggcababbcafgdfcaegdcgbdbeaafdgaedabedefcgfbegfcdffbbbdcfcebedbgebdbdfaceccddgfaadbcfgccgfcdadcaccccgffadgdgbcfaebceeacefeaggcfbecggbbfeddedgdeaeaggdfefaacffdacfacaaddcbegfggdafbgccffbaedeaebdbaadgbeffddbaggfafeddagbeddbdceaceeebbdegefgdafgcabbcccdefgdcaebgaeggcdafgdbabegdeffdaecdeacedbgcffgdfegefagadedddcadaagabedafgbggbgcgeagebcgabfcabdbcdedegdfcfcfbgdgceecffbgbbgeecgdabbdbgaeeebfggaebfdcbcgcffbgbgacagaeedcdeaadbbfaacgdgaeacgbadgagfdbgbgecdaacgabeccabdefeadebcgfcdafdbefbbcfbcgfgedabbfaabedcdfedbbgcbcdcceedceaaeagcbedcfcbbgcdgebbeddgaafafgdaabgdfgebacddecgaccgbdeefcdecfecaebgfcdcfeaaaefffbadgebgccggagadbfabdefggdcadbeebaecaggebcefbagfgfacgaebeffcdegbacafebbgaadcfdegbafaebecdffgaeefdddbbcbafabeaacadfeddgcbgeeaceggdbgecfddaffeeggcadcedecbfgcccbdfdfbegebbdbeefeffagbbagfafbbeggcdbfbaaffffabgcbfadbedfccfbgacgcfdefgafaddcfbagceegbbbdcceddccaegdgacdeagcgcbccgcecbgfdccdggdbdfbcgafafecfbdecfbffbacebcgebdafedfbbegfaafeebdebaeacddeeebfdaaabebdebceeabbcefagbafbcbedcaeeaeeeffbacdfgaeeafecgaeebcecdeaeabagdfbafcafecfebafbegfccebbafcdaccdebgbeefcccdecfbfgdbcedecgdgceebegebgafggddegafcdgbdcaabbfcgcabebagebbgadddgebfffcbdcggcccgfdfaadabbbcfadabbffdaeecebadgfaaecgddbffgecgcbafaccggfcccgbabbebgedaabdbdbbgfeecbgfadbaeggbfbebbagdedagbcfacgbfbfbgcccdeeageabbbbfdccbadcdagcbfegbddffgbfddgadebfcdfdacecbdcaffbaafefbbedgbbfbaaceabffagebcagfgagbbeeebaebfbfcacfbdbabgcegfagfcdgcccgfcecdgcabdbedecgdfdgecddgadgbegcfadeeeecbcedbgdgcbdgbbdcfgebbbdeccceaddfbbadgdbddabdbabcafceagbfaddgcgffccageaccafbagfgdegcfabdgeddfcgbaecegeebafgdfbacgdafaefdbbfefefbfcbeecdfacbaffdccgbgcdaddbgedagfebacfbccbfffbdcfcbeegdgabgbcdfaaaccecfdefaccaaacdcdgafggcdadefggdgabddffbgbdeedbaaadcegdecbaeafegadagagggbfggbgcdfadeadacdgaaddadcecadbbegfbfgadafedadaeefcegebagfceabbecegabagddafccbefcafbffcdfaefcfddgcabfddcdcgccgaebdccgedfgfecdgbcdffbfdeaafbbebbaafgeffcffbgbfeccfcdcgfebgdgdfbgbdbddbdgbdedgdgbdeefegbedgfcecbceabeaaegdceagcagecfbgfggccaaedgaafaaaaacafefcaaddbeaabfgbadcaagaagbfbafcdfbabafeefbdacddeccfebabfgfbgaabcgbaeffdacgbaggadcfdcgcgddaefggadgaadefabfefgfegcfbebeaaggddfdedgccgaggcaaccadeebfcefbcdgffgcgebeffdfggdcagefbdcdccafgcgcfgfceadccececfaaebbdegeagabdaafaeegbebaecacecadbedgdgbbfcdgfgeebgdabdcefcdadcebgabbfabagcddedfedagefaagfddfdedgdgegdacccdbbddeagbcecdedaebebeeedgacgffeggdfbggeebbgfcabfbegcgefdafffeceecffbbbccbgeagefabfeeebddcabgbfedfgbefgaebabbebgefceeaeegdgcfbagdbeggadfecaaaceccbdaggfceegbgcdfgdebbfgcaddeacegeegbgbfgdgfdegafbfeaegccdcfdeeeccadggeeebdfeafggbafbedefaacgeagedabfggeaecbadbcbeeafccbdedddfbegcgagbcaafbaefgagaggcfegdbcfcddebbfacfdadcaedbcfaabebffcaefbffgbbgbcefgfgefecfddgdgefbfgcfafagfbcdbbeacfbaffefabccbdgcecabgcfecaefefdgggdfcfegcadgaacdgcfedgfecfaafdfdbegdbdbbaebbbbfeacdefdgbeafffbcdbcbdgbbffbaccdbdbeacfeedbdcfdgcacaebfedabdcdabdfebcfdbgadcacddeecgcbgdcaafcbgabfccgeedecgdgcaecafedacgeabddfdacgdafeegaaeeaagbgcgabgcebccbdbbfcgdcbgbfbaggaecgadeccgedgefbabaccdadgdfeacdefadgggcedabcfaebgebbgcfdgcgfbaafgbbddabefcebeeagbcbecffcaagadeaccgeedgafaedfdegadfcgddbgefafccdbgcafdeedebdeadagccgefcefdfbefdcfbcgfbfbacaaaaffcacgfaafgfgbfbdedcfgdgabbcafebbfdfbccbbdedbdgebfdadbaaeggdaadcgcgdaecbadagcffdgaeeaafdecegebbfgbagcacecdgfgdbaccgdbgfbcbdgdbdadgggdcbfcgbgbeccadcbgbbfbeededbdbgfedefeccbegbfdegdcedfdffcgfbebcdacebebbdfagbfaffcecddcdaabeabaedbgeagbedbcggbcccabbbaabecgaacacbcgdaeggaddbabfcggfddffbcgdcbgabbacefccacbefegffffcgdbcadeggdgdfebcbcfbbedeaafacebcceacafcfecgefadcgdfafegfgfbfadbgddeffegafeddddagfefgcegdfdfbfadgbdgagdgafgcfefdacfdbfagcaddadacbgbecggfceacbdgaegfgfdedcdbgbgffeadggfefdefeegeegegbggaecbefcbdcfcgbefgffbgbadfeeaaedagccffeecfefaebddffeacfdggcdfcdefddgffceaacgbccbcabegecaaedcbagfcabgefbegfabcfgbbbcfcfagbbgebdfbfbgeedfedeegdaeeebfeddeggcfgbcfggcgadecdfcgecfcacfbcagabgabfgcgbbcbgcbabfffaaeacdedfbgcfbaegdcgeffgfbefgeegfcaadgddfgdfacgcafabeafbgdbgcccbgedcdfafdfgffcdbbeegbbcfcgddfccedbadfgdgdcdagdccbgcgdagadcacddceeefdggeacfbacgaeddfbdecfdabdefddaggbacbbgeedgacdddbeeedbdeegeadfbbefaagdbegbccacagefagbgcbgadbbgcbafbcfedegdgdfdbfdggadfgdbaeaeedaccgcdfdefcdgfddfabacbdbaacdfedfbcccbcegdfaebbbefgcbfdbbacaafaeeebcbbageggfagggfedbegdgacaddbcbcefbfedbefedbfgcgcbecbafdaeabagfebbdffecfecbgdcgfdbgcacgefafdfcedgceegbaccbdcgbfdcdgfceabacefabaaegbebfabcffegccffcfcdgdggefgaegegccdffebeggecbgebbcggdcagagcfddefbaeddggegedbfeaefeaddcgfbbecfdbeeggdgdfgcddfabagbeebgacedgdbecafafabcfeeafaefbdfebccggcbdagfcefgefefabdcfgedeeeaaccfgacgdagddgagbcbecagdebbbafcdaedcgfgaegefafeabdeegffccebffbacfgabdgdfacadcabdgaceadeabbfdefdaafbbfacacbfbaccedeeecfdcfabadgabfaddefbgfdbdfcgfaeffcebefaadfedbaeecffbfgcbcdgegbagdebeacaaagaegebfcecfffeedeeaccdedbaddgecfagbebcbdedfbddaeeeccaegegdbeaafabcfgaeeabcdbebgafbeabfagbdbbdecccdgbdgcggcggbbfdddebegadgadabcccaggabdeggbegdebefbgbgfdbdfgfgaegcaagcgacgeeccadfbfcbfdgegdegacabgdbgbbcefbdgeabbedegdaffbdgdcccabgagacdfdgcacecdfcedeacgaggecfcgcadedabcdgebdgffccbbeadbfcceggacbgebdfbgabbebggcecdgcbbefbegegdacabeaebebffcbgfddcgfbedddddgedcfebaefaffbefgebbgbeaececegfeeccbbgfdfcaeegeeefedefcccggfccgfbbefabbecfeggdcafggdegbdacbcadbedgageaeaeffafgedgabgaacdbddffgfadeaceffcebbbbbeeefebdgedccbdecfafaccbgcgcbgeeccbefegagfddfcadbfgddefgeaabadgefcdgdefecbddgddbaeecfeegffdddggebaaeebaeffddageecfecceeddeacfbdfegbdbeebgefedfaedgfcecfbbgfacfgdgcfdeecdegdfbegdbcggedbdcgeadebdbbcddfcggfcfgdcgegebccbgdadfgegecddbdgceffcdcafefedfdfcccgcagafgdfafccgafgfggggbcfcgfdbccedgadaabgfcffgdabfbbegfabdadfcbbddgcefdageafefdbedfbadeggfcgfebafadcgdbebgbfbadfggefecdfdfbdabfccfegabfcaefbgaaaggbgbcabgefgdgaegagfcbbeffbecggbdbbbbbdfcdgccaaagbebbgfdbbebgbcbggfcbcecaebagfdggfbffaadcggfdfabdaefdgggdbfeaccaeafcacdacgfgffcbfaccdbcbgefcfbeecdeggbdfdgdaacdagbabfcfecbaeaaccaacdcefgebgecadfcfbccgefcbfefcfedbddddgfebegacbedegefdcdfcafagcccfafaeafgdgfbfeedgcccfafcadaegegggcdfggcfabcaeefdcbfbggcdcfgdfebacdcabfbefegebfdagdgcdfcabadfcadgbdadafcebabbbabceadaadagbefbeeacdaecfgccfbdfegdbgaaeggbefbagaadebfefdcadfacbbdgagedafccaadabfedabafcedacggfdacddcaegaecfagabdegebabdaceaadbcfaddbddbcfbfbfffaggdggagbgfacfbbdebeeaegbacgcfggfccbddaggbfgceadbdcgfgcbcceggddacbegfbdabegcbefgbcefbefcgdgbgbgeeddegdfggfeagbgedcfddbaccfafedbgabdbbfadgcagdagbaedbegbfcadcabceacddacabegedfbaagfddffedgggfcfcbegggdgcdageeaeffgcdegebgcdaefecbbdfdcfagcaebbafccdddfabbgbddcgdbbefacgcaccgebcegcdefabdffebcgaabgagbedefbbebecbbedeegbfddfdbbcbeacfcacdbdcdbadddbabfageaaceaacabaceeadbadgdaeeeeccbgcccddbcddbgdceaggcbeefbbebeabaccacddfgbdecbaggfageaeffbefgcgebgegcfeefgfagcadffaccfgfeagcddgcdcdgeccaggfcdgcccecgdgfgeadbgcaaafbcgbcbbecgabbaaaafebacabgfdcefdeacfbeecdaecgfacfebcgabdadaaagacfgddcdacbabbegfgegefbdabdbbfafdgaagcaecceefeafdfadddfcgdfcccaegceggfecgdagbgafbbfgdbeagfefgbeaefadbefccecffccffeeaafbcgbafbggdaecddedddbadbbbdcgdegeedcdcggdadcacggcggfbbccfebbcdeeeecacbgcffeafdeegeecadbddccbgbbecfafcaaabdeegfcgeaceeggdcebeefcbgabgggcgdddbadgfbbgfgedddaddcegcbadcfaecedecedccfdefegaacadeggfggdgeeecdfbdgabdcebeagcedfbgagceeacdcdfdefdefcgddfbdbdedcfdfggdaeecaeaacdgedbfcbdffdafeefaccceegefcedfbbgfedecbdcdaeafeefcfbgfaeabfcebgggbbeacbfceagcggbgcccefedbbgbabedabdcbddfdbcfbeabfbbdcfdbecbgadgggabfaeagdfcefdgbeadbgcdgbbccecaabcgfcebbcedgbedbgdfadafggbbaebfffcfcgfccfaffdffdcfaddggedgddfcdfefdfeafegacbcbdcbgcabbbaefeccdeegbbgaaacbfaadaegddeaedabcgfcbdbbggbbccfgaegfcddfafeaefcggccgcffeffacbacgafafbacfggagbcebaaegefbbcgccdfdfcaefcabcbagbceeceddfcgcfaegffcddfccgfeabgbcaggdbfgabegadgagbfecdeecagbeagcegeabgfefagaegfecfbagdecacdcgaddgdcefebfgbcaecbbecdfcfegcdefbgddeeaebegbbfbecggcgdfcfcbdfeaeccaagccagebbfbdadbbaagdfgbfdaeffabgfcfgbccedfbecgagceccdfebcggcadddeddafcgccgbbffdfgadcdcdbggbbgeadaafbbbgcbffeafddfbbadeacbcgfaacgbgbdaacgcaafcaaadaddbdacaccefceaabgfcdgaeaggdcfeacbebbbfcdcfdfgceeeagfcbggccafffdgafdbbbadcfacbgffdfcdedgcfagbacggaebfaeaefbagccdcbeeegfbdgeecccbgaeebaabfefgcafgccecfecfcbdcfgcgfedcebcbcdgdfgfcfbgdebfacfeaecefgaebedbbgfedfeaaadfbfbcebcdeccgddfafceeaebdcffdgdbgffbfbbccbcccdeecgddcgbbadffegefbbddbbdfcegceadgfffbgdcabffcgegfdabcfdfdfabbbgaaffaccaeaadgbfdbcgcfbgcegdcffbgecbfccecafeacdbggbgaacabgedcfaffbffcccbeafbccdcfabdcdabecbbedgeabcbdbcbbcbdbccafdabdecbacdddfgdagfbccacgcgbadbebgfegeaaegbedcggededgfcbfbbbfbaabfcgbfgeaaccdabfaeffbeeccbcabgaaefdgdcecggdgadbbebeabdcedcbdbgebfaeedbcffadcdcfdcdgcbbcbedgfegeegfaafbeeddgabcgdeeggdabbbaddecdaedadaafefcabgcdbdbbgccfecgdegabggegagfbdgdeadabgdeegacbagddecefdcadeeaadaegfagdcgfgcefagfbafcfgbbcdccegbfcbffbfffbcgeedceccafgfecfaffbfdbbceccdegbeedgebggecffaabgabacbbbbcegaeceeacfbadfgcggbfbaafafaffffbdbaebececeeafaefbbfccdcaaffbedegegffaabfeababdebbbebaacbebaaebagbgbcdcfagdbdegcbfddcgbacdegabbfgeedbedeccgbgcgegbgaffgdgfcdccgeccdecbecgbfddcefgggeaageeeeafcfbccbcddaaegeedeeacfadcdfeeacggdabbbccbfbbgecgedeeaebgadcgbgegbaggdedgcbegfdfegfgadddabfgdagdfedbafbgbgbgcdgabeadadcgadbcfdedegbegaefgfagfeaacbafdeaacedbfagdfbdeffcfgdgfgaddafegcabbddceeacedefggbcdffdcgbbeebbeebeedgcdagfdgfcfcbgdcdddaaeggefdbdafdbbdfgggadbebcgdeffdafcgbdabefcbccgeffgcdggefgeefeeadgddeagcgacgcegfdggccacfeacgecgagbbfccfceaagdacagaabcaggdgcdegbcaaaeecceedaeddegbdcbgegafgeffagebgabcfgcbfabcgfbefbgbcgbgcbdfebgbbeaeceafaffgbdaeebaaccfgeegebggefeegegcbdefdeacebeagfdagedbedgeaceddfedcggbdbddaddgfabbeccegdgdeacccabgggafgffecfcddaafaadbgbfcgfgbgdcfcfafcgfefgcfbgdgbcbgeaedaeadfbcgffdceceggbaafaeebecfcdggacagafagfdgfgcdeegaabbfeccdafafgcfeeffddgfdeaaedacfacfbgcgaaababfcgeeaagggbebebbgccaagcgfffacfddcccdbbfbbgagegfbeaacbgddcdcdfffgfdccffdcecfbdbbcaffeceeddeaccfdgdbdggegeeccdegdedeaccdgfadcgefeabeedfefbeaeacbedbcfabbbeffgfagdfaafaccdfacdbeegedcdbfceddbfdgbbabcecbgcabdcgcdbdcfafebdabdcedbedcbbebcegecgfffafedbefadcdgdbffbaceffabffaadegcgcabdefcbeeeecgccccgfbgfeaacgdaggafdbdebedbbdffgaceefgdafdfcabbdfebcbcefdabbgagbegegaffdccaaaacafaaebdgfdbedaegafbeffcdabebedafcgagffgfgcbadgffgeacfedfeefedbacacgcdfbaafagcgggcecedaggcdfeebbacdfagegaeaaegaabgfcffgdfaegfcebacbbageafebdbfdfgggcgfbacfeacbccebadbaaffbgeabfdceacbdeffceaebebfddcdbbcccbedbcccbgbddefcadbacbcfabgccfgceaceggcedaeffgaadbcdgdaeggbbafedbgbgdfcedebfecfcgdcdbeddddgbgdaggdbecadffbafcbbegeabdbgbeebecfaacdabcbgagebddegebggbdegedgecdeecggfcgddfbfaafageeeffgfebeaacbfebccfgagdeebgdgbeaddfebcadgbeaacdddecbdbaeebfcgeffbeffegccadbfabfaadbegebagccdcgfebfeadcbgbbfddcbcdbdgefbecdbgdffbebecbgabgdbdccfagdebfddfefgfddbfdefdgfgffcggdfcbbebdbaeadbeacdcffbcacdeegccgbbeebacfcafbgcafafebegdacdgbedbebcebggbfdbabggacdbcefcbcbedabbdadgfaacddedfcccccedfbbafgeeabdfbbdbdbdfafefbgacbacagadgfbaeagddcbfebabcegbbffdeceaaggdcaacgefbdfafaadfcgafgegbaaaeggeddbedabbffcebbfedcggeecfgcgdcacegfbdbaadfdaagfgcefdcbcfdgebbegadcdgcddebgacbdeaecbcbcdbdfaafaddgadafdagdegcabbcfccbfgbedeedfebafgaefgebdacdgcgdaddfbgcdccfdbefcabgcbdcfbeddafebgfbgffbfebebbfgcfdaagddfdfecbaabefedcddgeaedfgdcaafaabceaefeadfdgcbccgebgebeabdeeebdddegdcfabbgfeeebaabdgadfeegfdadabbbaagbdfeafbbgafcdbdbcfgcaefdcdadeefeffebedbfdcccfeegebacaaadfdbbeageacbdggecgdcfegaffcdcfedgbdgaggebfdaceffagabcbbgggeagdfedfggbadaedadaegbccfbdccacdgdfdfcebgccgcaeccdfcgggdbcbfdbccdfgdfafeaadgabcfdfeffdebfffcbbfeadceabeebfeeadadbacdfbeadadgaagbcdfaegbbgcbbafagfeadddffdacffdbcgggedcdbgefbeaggacaacafeeddccebdecbcgfceeggedfdceacbagbffbcdfbbaaaggedggagfbeeagbdagadaggffcefcgcbdccegggbdegggfgbfdfdaedfecgcccafgbdedgecccgggaebebddfcdddceadbdedbbgfgbdcdcagdfccccgbeffbffaegagagfegdfgfcbbcgbcffabbfcbgefaadaggccabdbgaeeeabgbffefgeffbffcebcfabdebddbeaagfdbcagfbbgfegecbcfbedeccggecddbefcbgadeaaabaeaafbegdfdffdcadgedgcbcbdcbdccceffbeccagfaaagfecbadcaebdffaagcffeebbfadefabbcdbbabadfgadfdfcbbabdeacgacaefgfggbdgacggbefdeggggdbgffbefgggdbbeabgfefgaagbcefgbdbffegegefadbaaaefgccbdacgffdgfadbaaafecagecbdfbgafdfcddbbfcbececaabedccbdgeffdcccadgefagaegfebgaacbfagfcfagebffefebababbgafgfgdgddafeddcdbdeffcdbbacgegfdedbcbgfaeeegebcffddgbcecbbfddbcegcfdcbdaadeaaeadbfbcbaacfggecacdgbcgdggaegeebfbgeagecebedbfeeggfefbacedegeaggcfafaafeafbcgaabfdcbcfeabdadegdcbccdedfbfebccbecfgbbabadcbfeacgcbddgfdffafddadffadafbfbebdgcgdecdbfbggabbcabebfbggggeefgabagbgadadgcadbfcegafabggefggbgffeebfefddggbadeeeadfdbcdcbggafgbgecefgcfgaebdccdeddfbggecgbgefdgcegabbecadfdececgacgeabgcgdaacefcgaecdbgbfadfcdaddfebceabeacgcbcbfafgcfafccbacedbebcecedeffgfeacggagfeabaacfgggbggaeadadceegbgddcgefccfedaefaecgfceecgfcedegdecgfgdcdfefgadeafadcdegcbefeddaagaagcaffdfafgfgbfgcaagabgebdbaaffbccaebfcaedeebcefegbecfaabgaabbabfebgbacffefccfagggbefccadcdebffcacgaeggfcafdcdgedddcccdbaffbdfdbfgeeeaegbfgadbbfeabdccdbaeaecddeeegcddedfbeaeefadfgdccgacebeaggcabadcgeabcgbgdfedegbccbcdccdbgcfegfgcadebdgeebaefccddecabbefcgggbcdcdgbgedcgedbcfgegdccecddfeeffeaeaddefaggbbfgacgbfgecfadfcceeaffeeaecbdecacggaabbfbbafabfebfabgffddeafbagccabagbddaeafgffdaabcgacadfafcebdfbfefbabcadagbggccafcfgbagfbfbdgbfbfcfcfeeaebgdcbaafgcffceaggdefgbdcecgddgfccebebeeffdeagfbbbacaeaaaffafgeeeafageebdadacddccedegbdcbcefcdddccbbgcbgdaabgfafadgbbfcfbdfagfceaffdedcfcfbcffegebbagbfaebcfedgagaefefcccaebcffcbadedcbggfdfbadaceeeecaabcdfgebagefcgefcgfgccfbecgeeggfeecbebedbfcbefcbcbdaddafagedeeacgbeaeggfdcdababegfacefaedeagbbgabaedcfabggaffffaeeggdabfbdgabdfbcbcgagdgffefagcbfbaaefgfggfaeffbceceeecbbgabgcdccgbcdgbecgfaggbbegaebcfdacgadgebfbbcdgcabeedcaeacccdbbbfageefafcccfcgabeddfgaffdgbgcdebbbdadfadadddffbcgcbbbaacabgefgbbefagccgfebdcddcgadcabgfeccdcfccafaecafgcabfgefcbefaafeegfgbfbdcefeedccfaagdfgfaaggbfeggfdegdgdfagdadeeaacdgecfdbbdbaffaaadbbbgbaeefefffdadabggaaecedbagegffeeececdefdffecgdfdfbbbebegdabgcbeedcbaffadafcgdaceddeabddcfeeebdfaeeaagcafedcbfgeedcdfbcccabfeedgbfeeafafegdbedcadbcaddcccaecabgfagbfbbddbcgegafadecbadadcgdbgebffaccbcgaadcdabecacdfefgadbcgadbbgbebgaggagbageefbcgcdggafdgceabcgcbfggbfbbbgcfcdgfdeaggbdcfgfeeadagbcdfgfdcefeecdabfgfgbcefcafdaeabeegdebgfefegcgccgebddabcdeeagbafcgbbdgdacdadbdegacbcccdgdgdbgfbbgaedgagdcecfegadedafdecagbbaaaefacfabcddffaccaeabbgffabgfacgdadaedgggdgfeecdfcbgbfgdegeeggggfafdcfafdeeadggegabcbageaceagfcgbbgefcbacdeadcdcfecfgaccecaacadfffecdbdfgdefebcdeedcbcaaedafgbggceddebgaacgbceccagfdeabbafdaeeecedecdececgdefeeaedacbafgcbgfabcfbaafgcfdadfacdgaecdebadcabcfgaggcadbcfafcfadgefgaedaedededgfgbfgacacdfcabefcbeegcbebbgecdaafegfbfcbfaegbaebbgacgebeagbdbbfgbcabcdbfbdfefdcedcgabeeeffgcgggeebfcdcdgdceeffbaeagbgdbgcaddbgceeabfcgacfgcdffbabbdceddaaggdeegcafcbfcfcedecggdegdgbebabdgcfedafdgegafgfdggcdceffdacacfcfgaegfcdbecaadbgggbgdaaaagdfgefbffgcfacbeadbgggccbgbegfccdafafedbfedfeegeeaeddfggdbebgdebaggafaadedffgaebgdfededcfbdbggfcaegfabgdcaaecafgcdegagcbbdgafbfeefdebaeffebegfcegadbgccgbedffddcgebadfbbfefbgaaaabecgccaegcfaeeabbfgacefaabbdbegafabgfbcebdcegbdagdgfbgagffbadbgebbebaefaaffdbagaacaegadgfgdbdgcaccdfbabeebedecaagfgfgcgfgfabfcaffeabcffgbcbfbdbcgafdcfabbfccfagfddedcaadaaefdccfcbefcagabdffafbgffabagfedcdgggbfaagfeeefcgaaegecgfegeffddgfcefegfbffbfddfaffafcafbaggeedegcacecddaadbbeccfgcdddgffbeaefbadagbadfabgdcbfeaaaeedgegcdcdagcegfccggeccfcdggggegcfcbegfcgabefbcbedgbcbbgbbfccbafggeffddafdbbedcacegfegdafafcaacfbgaegeegcaccgfggdbcffcgabagdfddeccgdaffecbcdegcbadecebcgfafdefgbgdgaaeabeebfecagcbdfcaggbgddcbgggcabcgccdacdcgfgcadffbcebfeebdfcefgfgdacebadfadbegfdcedfgacfaaagfbaefdbaebccbggaaffefaabbffeegfaefebbccbcfdaaaebggecfbebcgcccgbedbdfgcgfgcbfdaaafgfdbgagabfefcfdgffbbecbabfdgffgdbcegaegcgdgdabfabafgfcfafdcgaebegcgedfbcggfbaccdcgbcdgbfcggdacdegaacaccgffeeebbdcdedgbedbgefdcbagdaabggadfgggdgafcfdggbgbabdfddagecacbcfecacadbdfafbccededcfbcccbgcaccgcafacgabdaegabcefefggbgfbedccdedaadceafddeeeegdecebfbfgbdfeefeffdcbgdecccccdabgbcbdfecegeacfbgdgdgfbaadafgggfgfcfaebgfddfceadbgbceedgdabfbcbbffbffccfgfaagbbbefcaefccdccadbeedaadfcfcgcbadbccgaddfbcfdddbdfagbabegagdaggdccecggegegaagbfdgdgbfgadfcdfadagfgdecbeebbgdbeegdcfgebbefgcgdcccdbgedabegggcgdccbggeggcaagcccdcdffefgbedccfdegdeefafcegdgcbfaecagcdagafcafcebeaadcgaabfbbgdcgdabdbbgcadcgdadcacacbfegbbbadfbddfebefbececefgafdbaaedfbdeagegfaggccfdfffdbgefebadeaafceabfdccddccdedcbddgccceffggcddcfddgbdgecadcbdeacgcacadbdbebbeccgcfacbgdgdbfdcdfdecceefbecefcafadegdfadgceffcedbbfeebggcdddbfgbbafeefcfgbdcbggbafgcgbdgffgfgfbfcdafdaafacgabefeadddfccfgaecbaccdeddcgedcbbafdacgfbgcddedefcggaeeafddeeeaegdgeecccdbeedfdbefdfadggecgffcebggebgfddccbafebecefcfagacdgfddccaabefgdbafeaecdbgedagaaeacdfcgfabeefbdgfbcgfffcgadefbcbbcfdgfdagfgdafdfegdcgfegbafbgbafcabgfbafeaaeeafdfdbdccddafafbeffgcfgdabebaffdacggabedagacegccfgbbaabaggbeeadfecbceeegegefafgcbacfeacaegcafbgcdabecfdceddafebdgbdbgcabafccffcegddgdgegbcecbeagedafebgdaaabadadbbfedcfaebbbcgfbbggccgbaeegdceeabggaagadcdggcbbfeagdaedggccdcebgabcefdebgacecbfccgebegfdbafbbdfaeaafegcagffegafcgggbccadbdafcgffcbfgdcgegeecfecbgadgbfgcfggebedegagffdfadeadddbaceadegdadgeagbdcccbcfdefaeecdccfagadcegebfcdfedfdgcebeaebgafafegebfbdaebgeccdgcadfdegddcadagcbccefdaffebcfecdabgdcecbagdeegccegccagfeebfbcbcgbbddcabbfgfdacadcdacaabggcdcagbacdeceaaecbfbfcadgcfbgcaegagddcbceagbefgabbeaffbefdaeddbcedacagceecbfcbgdaacdgagedfcbfffddacfadcbbcaadgggagcebaababgeebfccegbgadcaaeegafcefgcdfbgbbcddaedbggbdccdbaaffgbfbddfbcdggbgaagcafebdbcbdafggacbgbedbdfdbgfggbacccdcceegebbbdcdddfdedcbfebfffgcfbfedcfdabbbecceaabfeffcadceeebcefgaeagegdgfgbfdcaafadadceacccfceaadfbfcfdaeedaaaebccddbgfccffdbgfeefaefddeedecgbddgdbeffefcbccedbbaegbfgdeafcgeabggecgdecggfefgfbdegfcbeafcdabfagdceacbggceaggddfadfdegbddggeffdfegdaefagcaegebebdfgaddccfaagggcbdcagbggbeafgeagcfcgfdfefcbbadecffaeafdgdcgeaggaaeacbgccabcbafcgcebgeddgfcdeacdadgaffbbaggbcefbbaddbcgfafbfffbbceefaeccgbfbefbbebggggccabdecgdgfbaafcfgdedcdffgeccdegeffbebdecddagffbaefadbefefabcddfedgbcdcfadbggefgccfbeeabcgaeggdefecaefbecffgfagffecbbcfcdbggfgggbfdcgcbcfbbffbabdbfbefffacfbcceaddedfcecfbcgcgeaddefbafgcbedffdcefccafadcabceagcdagdceagbdfacggdfbeacadcgadecgeadfbcfgbdffaadcggcfdaefcccccfadbfcdgbaaebbcddfcfagfeceffggfabeccbfdgaeagdecceacageaggfabdccgbfeedccfbdcccefgdfagcbaggefgddbfdddaeecdfeaefcefdebbegbbbafabgcacdfeaggfbdbfdegfdagggeegfgcbcfcfcaccfefcdfbgbfgeebgcbgceabdfcaacgcffafecbcbbbddfabceggaagggafagafbaffbbdcbeccgbfacaffdaeffeggbdfbgcdeadadagacaadbeegfgaggafgaadagagebbbbeadcbecefcfafefddacbdfcgfgfgccfbbbaagccddfadeafbfcgdbcagdggbbbbggcafbfecffcgagdfafbgcddacffgbeababbaaddcbagffebbffagdcacafdcbbcbfdfdcgaccaacebeecbgffadfccbfaadgfdebcgaedfadcbdfedbdacggcgafbaeffadbefdbdeeeegadecfcaebebfacfeacfcedgadfbdbebdagfceacgaeegefgdcffgbfbcdbffafcdaedaadbbgceaeacedgffbeffedgbdgcbecdbcbfgbfabgcabcfcccdfaebcbggdeffddgaaccgbdgfdedbdeabcgadffefecfgdaaegcfgfbefbcbggagggdffgaegccbdeegeggdcacaffcggegeffdaecbabbcfgbfdcgdgggfdaceeagdcaccedegfdeaaeccbaedgcefaffeccccgfgdagebagccdfafbgcgdgcbcaafbaeebgeffgbdbaaeagaebedadafdfccdaaacbaceddggaadedggegbdffabfffbaegcaffcgaeadeeaffgfeafegcgcefegebacddgcdcecdacfbfbeeffcdbdfbebffgfegebgecadecbfaffdbegegadbdagfecdfbadbgfceacddaceeeeadadbebabcgedgffgbefbedfbgadcagagfaaeaadbebfcgedggcggcccaegacccegbfgcbagcdccecdecdfadccaceaebbbgbegcffegggfebgcggbdebegacadaffcaaafaefgceedgbgaadggcdebcbfefadfdedcgagbcfcdfdgacbegbbddcdccbaeafeeddgbgdcdggcddgdcfefddcacbbbfgadabfddabdecfgbdbfdgagcegcbdfaffacacfcbefdacfbfcgefdgebcfececagaecbbafgfgcfffeefccedgfceaafefffabebbabadagcgdbecegebgcgdccbeaedagdcgadfcgcadecbgbaeggfafbabdebgfacgccabdfadcfbafaaegagbccfcaffbgfecbfdfeadfbbcdedcafbbggcegeceefabdaaegfbeacdbbadfdadfaabbafgagacbgafeecebefgdfbccdbcfefaedggeddgeebafgdegebggcbefgdbeffaggecbgceeecfafadadcbaadfgfccaedagfedbfbgfbfbffgeeaeedefffcbaecbcdgegfbbcaebffaafefbcgfcbefeeagaagegcgfdacdbdecffcbbgddbecfdfabggbeafcddgaedcbfadabccffcgcffffbbebccecfcffebcacgaafbabcbbecdfdebgabbgfadfffddbefgcdcdcfbdeacfcgabggcdddeabfbeabecaafeeagcbbefcaebagfdfdcebgfebgfbgbdafcdgcbafeaegffacfafdcbeaacdebgcdgfceagfdcadeceggebgdedbddbfcbccdcaabbdggcdecgefbaeefgafddcfbeeecbabdfdaaedgcaacbfgffdbeddfegeeeedbgcbccadabacedebcbdgacbbaaadacecaadddaggceadbcegefafcdecebgaebcdabdgbaagdcddfffecbgbggaeaafcbbabeabccbaaaccafeedgaafgdaaecgabdacfeegbagcadcfadcacfgfbgaaaedfdcfefcbeadaadbddfagbcbcccdaeeadcgfdaccegfgbdacgdagefgdgcgdecbdbfeceefgaggccgcdgdeceagccbggaafdaeadbgbgadfddebcggbafcebgaccbbbgfaadaebceeeagaageaadaagfcfbaafabeebabccgaddadggffggafbfgggcdcdeafbegggebdbfefcbcgbdacfcddaddcbfdeccfacgeacdbddfgbfacfgcdagffbbgeaecbbbedaccfcbfdfgeagbgcffdfdcaeeeaaebgdgbbcccbceebggfedegggfggbbadbbbcadabfaaebfgaccfecggeeeeedcdbfbcgdecafbfedgagfbgagdfbfffaeggacabadfdfcbcceeaacccegcfdaaeaacegedfbadecbfgddcbbedddabdccecabgddbfegdbbggefbcefacegabfabfcbeadcgdbcggaegbageggaegbdabfefefffbbaaeadaffegadeddccbbcbbgaedeeffgaeedceafdgcecgfceceaeffbbaecdcaadaeaggbcgbbgfbgfaegcfbegdaefafaaadgbdefgadfdgggcgggabgadgfbgdfadafdgbeddeafbafgbgbcffgdegbfdabcagabdggecbbeccggcbceddffaedcgfebbeggdbadbefbgefcadcafdcfaadgabddadeebcacbfbbdgfacegdacbeaccfdagdffeedgggfdgcgfbdddabbefebaddbeedcfdcdafgdfbceffdcefcggdddadbfefdaefdebbfccafagafacbecededcgdebgcaedfgfdgcddfecbfbbfgfdafgddaebbcgbccfaaeegfdgadbgbgcfbfbbgdcbfagfedgdagbggfdcdeaabgbacfdeecafceafegeaecbacgccefgeacbdfgegfbbfdbgfdfbdbddabaebdabacedeffcfgfccgeacddagfcbfgeecaagbcdgbbegdfedggaebbcddfecedefecagcabebbecgdbfageggbcedbgeggcfegbdcbdegfefabbgbbfacedgbdecegaddcfffgbaffgecfbdcfacfccdfaaebfeageffebgbbbedbbcdddcbcfbcdfbdfbbaebgfecdabfacdfagaebbafbcfdcacgcbffbdddgagbbcacaebadgadaacdgdfabcbaccdfbfbedcdfacbeabeedcddebdadebbgfbdgeefefcabaaeegegdceecaabfcddddbcdegfcfccddecadbfcfgbccbaeebegefcacfadfdabfgbcbgffdeabaeegcebdgcacbeaebeeaggfbgbfdgdcdbbbgeebgafgfdeggbdfeededbbcbdeeafagffgedfefcgbgbggdbbfcegabafcfbfdcegggbebddadfdabgbgcffcffdbfefeegeefdbegfgdeacfdfgdaadcbebeefeefacebcaeebdgfdgegddecgbcfcbgaedbfgbdcegcagabggeddagbddecaabcacfcfbgbdcageeedecbaeccbccbfaeedbaabgdaadcbbgfgcefgdbbgegedffcafbgcdacbdeagabafeggfgeecabdggcgadgcbgccebfeggfagcefegaefaddabagaabecdbbfbgefcgbddbgbffbffdbdedbeacaddgfgdbbacbgebgbcggecfdcgcefdgdadbcgcbcgaeaecbggggaaecffdeeffaaccbdaabggffgfbeabfcgcefgedcabbafbagabgeegfgbaeebcbafbfedaeebbbcgcefgbgfeeagdcbgfeebgcfcdfeeefeaecacfebgcbcafeadfdeffdgbdbffgceddbcbcefgfbefgfefecggcaegdceabfgcadgcegfagggdgedfbadefbccaecagbecfedgfaddgbdfffgddfefccbdafbdgadeedggccggagbgfgcefgagbegagbbffdeffbccdgdageabagegddbabfcbegceedbccdaaaaegabefggdagabcdfdcfcccgebdebcecdcbgeafceaedfadefeagfebggfbfccgabbcbcaafacefccccfcbgdedffaaeabgadcabffbfgfaegaaggdedgfdabeffdebbbbdcddaaadfabfgbefcfgdbfdgfdgegacbedccdffggfgafcbbedadgggecbcddgfbgfdbebccbebfaadffgdcdaaffcaafbaegfabgegcfcgdcbedfgdfbfcdeefgbegbagbgfgabdfacbbddfedbccgbecgfbdfgadcegffbfgfdccggffdebfgffgcecgbgedbdgbbccadcefcbbbeacaacabggfcfecfebgeaeeeccddbcaagbbgaaefbgfbffcafgcfabgcfgebbbegabdgcdcdeaecabbbfagafacaacffcdgaeccfbgfgffdgecedgdgfabfgdgabdfebfgdbagaceaeabggeaacbabccbfebacbdfdbgaceebggafcdgdbefgccbfaceaadebfbfdadeafbbeefgdggbefbgacdeaegbgaeadafgcddbacagdgacbcgebaebbbagffbedbbecggdfaedcegfbgfegbbdgdbaacgaecggfddafbbaedfcdfbbbcfedgbfcffeadcgcggdgegccegbffebgdgcaeefbgaaebbfgafbfgcgdededdefebebcbfdbbaceaagcgabdaadfeecddaggcecbgbdaceggdbedgcebfgafcceddgfgeedeebdafeeaccdbbgcaggdadfaeaacgfcgfafgbgafddfdcbedfaggccafafcdadeadcdddaeggacdaefdeaefafcedfafgfdcfgccegdbcaegaddceafdgcggfccefbgeefdabggegeccacbfadcgfffdeddgeefcaedeacgbdfgaadfafdegcccecfcecefbbbgdgbeaecddbebbfcaeefcdfddbadceffcaadaafaffceegfgcaeecgdccafebffeaabbfdcggbedcccaegagbfbgdeebbgabfcbgfffbggbdgdaacbfdgefcecdccgcbdgffafcfcbecbffffffegadegecdfcdbeagafgdcfdbbgdcaddceccfeggbggdcfeeagfffbgafgadbgadbdddgcffcabgecaegddbcdcegcfcdgbdfgaafdccbbggeebabdbcfbcbfafffbcgebbdbgeadbfdefegdbagdgfcddccfafdecgfbeaefcgbgecdgfcddgaegfgcgbbbbbfgcggbdgcfdaaceecegeeefcebaecdcbdfegdeaddbgcgecbcbddcgcdaacdafgdececeafcecafadebeaceadbabegfeefdfebaddgeafefagcbbabgeagcbebffdbgdcceecbafaadgdggecfdaaedeabcfcgcgebdcdfgaaeadfbbecgbfagfgebgggagfddgbfbedegbbecgeebcaedgffdfeececfcfggagcfegbcddefdbdaeafcacebdfgdgdebeeacdfcbgfdfdcbbadadacecfcefccbdffbdggeeaegceafgffedfbcfeafdegbeaeeegabdfeffgcbafecfabbggffddagfggcdebdeeeegaegdfbddfaebbfdbcdabcgfggbbaebbdggcddfagddgeefebgcbccfggfbcefacgdeeafbbddccgbgddaabccfdfgeagcgegbedgadgfcaddbceeedbbaeafffabdabbefffacaebffefdbgafdffddgadefgceecfgccbaadegdccefbffafbdadaacdfdcaccaaggcccbegfbaeadcegeabbcaaagbdbcbcdaagegecdegcgeaacaddbdfdceeeegffcecebbgffgfgdfgbafffgaadfdbaadaaacbedgdbeaggebacbbabdbgaadbegadbdfgcacbgbgdbcgadbcegeebgfcafbeedeegeeeggggdcdaggbdgeaggbgegefdbbcgfgdffffgeebabbgfeceacafgdfafabebgeafefbfcfdfeabgfdbccbcaeefbacdagefefgfecdbcdcbcefabfbcgcgbfcgabgefcagfegebggegfbeegfcdcccbfdebcbbfefaedgdgcedgaecbbefggbdddfcggacefbgacbgbbdfbaabfddecfaabdfdgddbdfdebagedccdcddaafgdeadbeddedadcaegcefaafaeagcfaddeecggdgcfddbfgfgaddaagbdbcgbeffbdebbbdfgagebbgcfecgafbdbcdefdcfgeceedegaffgccadcacbefgfcbggbcgggfebgdfcbcaaffbebbefeecbagbgdffcegacfebcbegefddabbcbccfagfbbdebaefbegbeddbccafbeecdcfdcafafdeagcccbccfbgegcbfedgddfddbdccbccfffcfdaefedgaegeaabecbgbddcebdaddfgeebcbcbeececbcddaefdfgdgeggacdebfbdggfbfaecccfaffefcfbgaffbaagbfeddfdgecaebdgedagabbgaccgdfddbbfagdbedcbdcaddecbccecafafeadcegfbggaaaaffegbecgffgccaceefddcafbddagbgdbbfeebcgaagbcdddgedcabgaaebcgacabggcaaaecfgbgbgegegccebcedgddfbegdedbebgddcfabfdageccdffbcbafbgcdcaafdbaaaccgeagdabdeccdgdfbcefegbgebeeaddbcceabcegaebeaccfeaeceagbbdfadggdgabcebbcdefgddcacaaegebeeegdfcddcagbfafegfbbedbfgbfgcafcaeccabgcafdgfcbgegbagaefcdeegagedbbcedcdfbbdcbbaecdgdfeecageeaagbbcfcgcgbaaaaecfedcbcgdeadcaffgcgbgfecddgagccdbccecdaafbbdeeecbffgcgecbcabcbgccadcecdfebafbgggbaeecfgfdfffbbdgadfdfebdcfgefaedgbbefgefgeadebddgedgceeggfgffdebbacadbgafdabagddfgeggeacfbbfbedafeedeedafdcecfggfeffbgbbagfafaabffdeggaagbcabebdfbeacdccgecbccfagedfafaccgcgggbbeabgddcbebebgebddaeebgdbbfgbgfafeaggccgbcdbcgdfdfbaaddccfbfddggfdfcdfgfccfbbcadaeedfagebgcefabceeddebbbdbefcdcabeadfccadfgcaabecbdgefafdaffeeccgcddcdeccabcdefcgdeecgbdefacaeadddcagdaegedceceacbggfefeaagebbfabagbdbagbcfbfcfdagfeaaeggdgbafbggabbggcbcfabedgffagebdageggfaffbegedbfaeeeggdfddbgdccecceaaaccagbcgacgcccgcagfegdbfddgafdfeddgbcadeeedbfcbbaffcccefagfdfgaeaaddfabccgeggaaabfcafcgbaacddcaebgcdegcafbbfbdgcadcbdfdbdfebaadgbebaadegbecefebeffcecabegdbfffbecdgdaccfaacadbfaggfecfcaggcdeccfadeaaafaggecgacfabgceabfdbgadggecbffgaccedfaadgdfgdbcbdbddfgacafffffdgefdbcacaecdeebaegcedeebdebgagffdeafeaefecafafbeeabadfabbgeedebeagafaegfcfccggdebffcedgafceaabcgcdgbcbgfgacaddfgeceegcdggbecbgggggaeaddegdaacbaacedfabeafafcedeccdeegdcfefabcbbcecbccegeeefgabbdacegcbadbddegacgdfgbdgebgdeacfbfcdefcafeeggbdfbabfedecdefegcefffacgdabgedbcbeacagfcddedcgcgadbgbcddbfcbbbdbfffabaebfdefbbfegfdedbeggbebbefbfadedfbgaebdagfafdfggbadfaceebbbcgacacccgggcaggedbfccadfbabdbgdgcegbecbcacfecdbgbfbbbdeddacafgafddecfbdccgccagbceaaedeecdfdbdfgeagdbcebcdcgffaaedfdgeadegbefcbebdgccbebgdabdacfebfdfecbfbecdbeefbfaffccegefacafbbedddbcggdbaedacgddafcfcaeecccgefcefaccdfdcbgcabagfbeaadcfbdaadecfegddedfcbgfcagabdbgcfgbbcdddefabfebafffgfecfefeeecbbcfcacfagbaeeeddbdfgacadcafbgefeebbbeggbgfaefbcadedaabgagdefaaafgabadfgdaaadbefbadddfeadefbeegcccfcfgaeffaegfcabccdafdcacbddabedfegcfdggccbfddeddfbfdabadccfcefgfbffgdaebceggdbbfbcfdbbbafeefgdcaededacffdgbgdggbegggbecffgdfeeaafadcegbadedddfgecbcaaacgdddaefcdebdddadaebcbefbeaefefcabcgffceeccfeddbgbbcbddafgcadgfcgbgdfgbgeffeacgadcbedgcadaegefgfgbgfaecacaedbcdbfebdadceadcdgbffgdgegaebeebgafafefgbageddgccaccaffdaddfcgcecddecggdfbgbfcbbgebeffgebfgbcaebfdbfefdbbfbeacacgbfeedadcbebfegcafcafbfbegcgfbebdbcagdgdbfdffbeebfcfbffdfagcdabacfgbggcdfgecbgaeabdddfeebeeadfdgeebbebbcceceafgcecebggbdggeddgeedggbfbbebfafdcafdaagceegefbgebbfecdacbaaffgaffafggbeceedaecacbeaabgaeedcgbggebefbadcefbdcfaeefagbbbfdgbaagfebfafecgefdebabgcafgafcggedbfgegcbegecfggcaaeeabeddaddedccaebcegabfcegfccbebfeffcaebccfgdabgaefcbfacggfebbbefcacbagbaedcffbfccagfaeadececgcfgdabdgbgegbedgacbdcafbbeaeafabafecdddcbaabdfbcgcegebaffdbafgeeaebbecfggdegegafccggddcffdecebacdfebgdegaecfebbcegaefgebebeabdefdbeebfddbbgfecgegbfegaeccaddcbfdageeaedefdgggfcbdbeacefcdgdfbffebefaaacbdbfbcceeffbcdecdbcefgccdcedbeeffdaddeagbfbbefgccfgebbdcbaegafceecbfaddbacgeeacgfdegbfcgfgbaebdgdfgdcbddbeafcgccagbcegaadedeccggeeacfgeadegaedcegfggfccgfbffcdacbbdcfgccecacccfcffeabecdbdbebbdabcaefdgbbdccdgfceecagdaceedbceadbeaeaaaafggeffafdebbeefddcbgebdadeebgbdbcddeggebedgebgbdcagfffbbfccegcgebgbdaecdaffffabdaeagcafefaefdaaeccaabcfababbdggebcdgfgedbffcdgdgaedbdfbcaggbecegcaaadgdfegefabacbdafcgcaafefdaaefffccdcbcccbddfdbdcaeffegacefcggdfgdgfdfgfebggbebdacfgcebcacafbgaaefdddfdccfcccccaggfbfagceabaffgcgfcgaecagdfbcdcdegededbefcdeecfdffacdegfefecbcdbfcfbbecfgdcegdagfbadbadfgcgcebaebafbgdggabefaceeadgfagecgfgffdaeeefadgdcfgbaebbfgfdbcfeecbdgddeccddebeccebadgagddecbacaabebbgdbcacccgffabaccaaadeadfabeebcgbfgbbdccbbdadacabfgeggadcaebgbfdfaddfagfgabbfdcccdafggggdbfdabefcecgcfecffdaffefdfcgegdgaadgdefefbcabfaggdbeafdafaedgedfcabfdfacgaaafcdfffdgecdfcddagdbgfaadabggaabefdccafcegddadcecbgeecggfacggcaeadgaacebaedccaabbebbagafcbfefagbgacbfbgdeffaedgaebbbcaccaffafbfbbfagecabbcbedgefdccadadfebagdecdbecccccddaeagcbefacgfefgaeccfggcfffafcffffedgfbgfbbgfaggggfgafbggebcdfaagcbfdfedfeecdbeecgcfadbaabfbcdggedcaadbefdafeceaafgadbgagcebcadcbbgcbafeddbbfbabbcbdefgaeabdggeefaffagcdeaggebgedeeaceadabbabedfdafeefcfceebdebfcebeebffddcdgadedgdcefefggbbdgbbgbbeeaafabgeabcdaegaafffgcgbgbdagcadafdbfgcdbadbgbgcfegbbgfacdcfacfaefcgcdaabdbdcafabdggeeadbcaefaffbeagdbeccbffcfgdcbgdafbagfdfbdedbfggeecgeeedbefcecccggegebggbgcdcaacccefbbcgeabcegddgaaaffbacdeaadeadegfdeffgffffgggffebcdcdgcgabbabeagbbcbeebcefedeedbcfbdedeabaafggccfgcedcdcefebgeebdcedegdgdffagcdcbcebafcfddaedbccefagcdgdgacdebffcdbafafaabecgacaeafabgbcebagagfbdbfdcfeegabdedbcdbcdacgcbgdfdaccfbbfebcdcbafefdfgdbdaegeafcbgcfgccaagecaecgdfgddgdcfggdddbcgfcbdbecbbggegeeaaeeadgbefegcdacabeegacfaggcdacgdagcadgefddaaggccadgaefcbaafbbccbdgebegbbddfgdbfedegedbdaddcbcggdbabeabfbbfdcdggdceccddefdbgfacbcgdgaegbfabeccddgaggggaecfebffbdafggeffebedbfdaafbddafgfafcfcedebfgebbabaeddaabgbcdecefegdbfbeebgdagbgaadcdgegegefddegegaegccgddbcbbgdbefadgedgdffbgfdedadgaffeegbcfeggbbfbcdbagcgcdcgdecaafeefabbefbfbcafabeddadbbcadccgaffgeedaddcdbaagbdcfaeegfbbbdbegafccfcccceabffeaefeaaceadcdcebcdgbfbcbfadfdcffbabdcbgbcgfdfaecbebcfeabfeafeagbeefbgbbcfcaabbcfabcaefbcgabbdfcgdedaagbfcdabbagggaeegdfafceagbbggbfbedebdfgdeccbdedcebdcebbbegfbegbbabggdcfcgabagabfgedcbgbcadbabebfabebgafgdddaddgddcagabegfdadfacgaeaedegcbefagcaabagcdfdefaaeecdddgbfccgfaecacdeeaabfcfgccdgaababbaeccdagcdggeegcefdgbdgceaddccbcagagabgeaacdefeagceaefebbfdbgbdbfebddgbcdcabbcffgabegfdgeeceebgcffbabecffbegbfeabgdfecdfgbbagcegaagbdecbfffacccbagbgefgfacgaddabddcaaabafddeabbcfaaeeafgcgafcaggbcdacadacfcefdabggcfabbccedaedeeaacdaaeaabbcaebfcbaegfccbeedabgbgffdfbgadecdbfagcceaeaccfgdaecbbbdabefafbfbbegdeaefefffgefbeggccbeffefcfbabafbebaecedaeafgcffeacccdecfcffedadcbgfcgaaafbfgcfegcdbddfefgcdgddbfacbggeegfebefggfgefcbdaabfcgfgcdedebegdbdgcabbcgdgagecbfecegdbcadbeebcdffebdgaebfcaefdgdbbbfgcaaggcefacgcaefdfeaebefgdefgfadeddbbggbcbbcbggcebfcaggfggbbgfdfecgdccgabdffdbafdgfcaaccaefefadbbebddcagdbfbbabacccffbgafbeeecbdbaddaacbfcaefacccfdccdfcfcafgcbeafgadeeeadbaegcbedagdbccfaffbbggdffaefddbagcfgfaeffbagffegabagcbagaggeacagabagafeeddbfcaggfdbffdcdegdacbfcababcfedggbaegeaabdfebedbdbfbecabbfcaecdbcaagdddcabbeadgebfbdcagagedgdgdgddcdcdagbbcadbdecgdadgffddgggbffbgbdgabfedcdbefdadecgffbddegcbaaaeadgdcgcgadefgegdedgdbbdbbcdfbeeeaacfbecfbdeedaadbdfaccafdegbdbggedbddgagagefeacddeefgeggdbaaedadbbcfbdgafgcdbdbcffcbafegeceagdbabaeccebfebdgcdgcbddgdcbcdcefegcgbfffgcfcdddaddcbgcdegfdceccggcdgdbbegddccdcdaacadgfeabcddadaffegfaafdcbfgbggfbaabcbegcfcgccaebedfgdcfgdgfbfbcbbgcafdfgaagffdccddcdgaagggdbagbafcgbaaggcfacegdaafegbgcccdecffgfabcefbdcfbedgdbfdefeegfabadddadfbagcabeagebbfdcebccfbggacaabecaaagebffcedfbaafbegedfbcfbagdgfccefbafeeegdafdddddceefdadgefdcfgfgdegeaaccegbgeddebadcfaegdgbcbfbbdbgbbbgdgdbeffgbcdbgeecbedbcdegadgccbdebfegfgfggabdafdcaaceagbedadeceaaaggdabgdeagdeeabeabaccdaaefdebfggdagdbcegcaaafdceaebffbadbedeccfdecdcffffddggcggdagcaecfgbcbabeaeffdbcddebcagcaecfcbegdbggadgcabdbabeddcddbccgdedaccdfabbcgdaafgbdcabgfcacbbdbfeegfegfcbfdeacgfefgbbbagecddfddfbdgeaegfdafcddbffaagebfdgdddaadegagfeegfbafbffedbgcacbbaagegebafaggabedaefcggaagdefedafeddgefcdbbddaffgdccccgcecdabeadbagacggcddbgefgffbfgfaeebefdbbddcddbcacebefbbcbggggadeceaagaeccebfdbfaededcegecafecfccbecbaeecccfdcbaeabfccbebfebbeaaggegfcebfdefdcaebcecfedbegebgefbgbbaabgfcbefbfbgbcgfbcbfcagcbaeaeeaeeadebfcacbbggfaebaacfbggdeaacbeedabegagfbbbdecaaabgeeddeeegaeacefebeedgaeebagbbabeccgbfdeegdaagggddfbdddggeccabffagdbbdddcbcffcfccafdadgccggegbeeacgdfcdadfegecdceafgffbcaddegdbcdgccebaafabdabgfbeegfbgbefbcabgccdgcbcfdbbbdgcecefdgdeggcecbfcdfdebeaedggbbefceggdbdaadefbaggaabgffabgeadggbcefbecfbceaebageadgaebafebdfabadecfcdddeafdadcacgebdcfggeaagdbdgfcgefgfeecaeadceadbcccfeccaebdacdcbegaadbbgadbacaebaedfcgbedebccgebdebaacdadffebabaadbcccacfbefecgcgdbecbdaabfcacbbcaabdebeafagebccgbfcffcddefdccfbebaeefebadaeaafgbdegdffcdbcggafdaccgecgefcbacdbfdgdeegcdbabeddgdddedecbcaddefdcadgfbeffegcecbgbeggedeefefeddgbecadcgbbdfdddbdbbffgcggceccfgdbdcbgdbgeafgbdggdfggbefaggegbebdcfgcdeaafcadeegbddacaccabeabdebcfcabfbcbbbfacfeaegcadgafegfcfffcdgefdfbccdecdacdbabdcgefbaecbbbcgcbfbbcadbbbcaffcccbfgdadcedgdbbefcgegedecgfdbfgdbfccecggbgbbdfefcagcceadegggffbbbcegebcgdddabgdccfeeabgcbedgfgacdecgcffdfeacdfbgfaeaceddcddbbceegadfddfffeacdaedgfdadebdebddbfefbggeeabfgacdfcdaegagffbaagcggfdaccdcfbdgecbddgaafcbbecgggebgbgcgffdegeafeeaedggdegbgcgfgdcegecdfceffccfbbddcbbcgbcgcabceceegecfedcggffgeddggcdebeacacgdbfgdbbafeefbagaecaaedbfdaefadagbabggafbdbbedefeebaegbbaegdgfbcaefbgggbaebbbagdfcfeeeafgfbcdadggefbbebegbagacegfaadfaafeageebecedgggaceffaccbcdffdbdgggefaeddcbacagcedcbgadaeaefbbfcebbeggeegfdccaaafgbfabfeffacdbgbeddedggdcfdcfbddafdgdafcgfedgfeefccfdcgfgbeccdgfgfefdceabdefddcgafabgecccfcbdgddebbgfcbcdcadggafedcefgfgageefefgagbeefdaccgdgbedcaggaggfcdddadegefbedgaebefdbceccffacgbgddfbgfaggcdadggffcefcaacdbadfcdccdbgbcgdaeacdeedaccgdgefcdbaaeccadbbgacbfcagcadbaebbcbfbfaggbdcfeebacdbabeeegeffebcgbedffdffcbbbcacegcfbgfcedcbdggfecggcbdaafbacabfgbgfgcefgaadceeeaaeabcabbecfafcddecfabedbbcbeaacaabgcfbbdaebgfcbfcecadfdabfeaacdgfbedddbdgbdbfaddaegedeagebcgeagafgabbgggddaagcdabdeddadcaagbbbbebdgdecgeaeaccecgaccbebggdddaabcdfadadecedcbebgcebafbgfdebeecdcdadfeefbefgffeaecgfcbdaagcegaedfbddbfbagcgdbcfceceeedcfaggcabdgfacggcgaafggacgedfagdaeabdfbcbfdcgcggfbdbeacgeacadgfdafedegaggbcddgfggeceeggbdfabcdfcaggedaecbeecagdgeabedfbgdfbcbbeeefgdgecceefccfgdddeaagacdggbgdbbcgaccbfdfbadafecddbeeaebcbacddeeefdfedfcbcdcaeeaabdbbggbaafedggdb", ["a","b","c","d","e","f","g"]))
print('SolutionCountAndSay')
print(SolutionCountAndSay().countAndSay(1))
print(SolutionCountAndSay().countAndSay(5))
print('SolutionInvertBinaryTree')
t = TreeNode.treeGenerator([1,2,3,4])
t[0].left = t[1]
t[0].right = t[2]
t[2].left = t[3]
print('before: ', t[0].treePrint())
SolutionInvertBinaryTree().invertBinaryTree(t[0])
print('after : ', t[0].treePrint())
print('SolutionMajorityNumber')
print(SolutionMajorityNumber().majorityNumber([1, 1, 1, 1, 2, 2, 2]))
print('SolutionRemoveElement')
A = [0,4,4,0,0,2,4,4]
print('%d: %s' % (SolutionRemoveElement().removeElement(A, 4), str(A)))
print('SolutionHistogram')
print(SolutionHistogram().maxArea([1,3,2]))
print(SolutionHistogram().maxArea([3,4,2,1,6,1,8]))
print(SolutionHistogram().maxArea([59,15,23,55,30,47,61,74, 25]))
print('SolutionHouseRobber')
print(SolutionHouseRobber().houseRobber([1,3,2]))
print(SolutionHouseRobber().houseRobber([3,4,2,1,6,1,8]))
print(SolutionHouseRobber().houseRobber([59,15,23,55,30,47,61,74, 25]))
# print('SolutionContainerWithMostWater')
# print(SolutionContainerWithMostWater().maxArea([1,3,2]))
# print(SolutionContainerWithMostWater().maxArea([3,4,2,1,6,1,8]))
# print(SolutionContainerWithMostWater().maxArea([59,15,23,55,30,47,61,74, 25]))
print('SolutionContainerWithMostWater')
print(SolutionContainerWithMostWater().maxArea([1,2,4,3]))
print(SolutionContainerWithMostWater().maxArea([1,3,2]))
print(SolutionContainerWithMostWater().maxArea([3,4,2,1,6,1,8]))
print(SolutionContainerWithMostWater().maxArea([59,15,23,55,30,47,61,74, 25]))
print('SolutionSetMatrixZeroes')
matrix = list([[1,2], [0,3] ])
SolutionSetMatrixZeroes().setZeroes(matrix)
printMatrix(matrix)
matrix = list([[1,2,0,4,5], [15,0,1,4,5], [1,2,3,4,5], [1,2,8,4,5], [1,2,4,6,0] ])
SolutionSetMatrixZeroes().setZeroes(matrix)
printMatrix(matrix)
print('SolutionMaxProductSubarray')
print(SolutionMaxProductSubarray().maxProduct([2,-2,-4,5,-3,4,-1]))
print(SolutionMaxProductSubarray().maxProduct([2,-2,-4]))
print(SolutionMaxProductSubarray().maxProduct([0,2,-1,0]))
print(SolutionMaxProductSubarray().maxProduct([2,3,-2,4]))
print(SolutionMaxProductSubarray().maxProduct([2,3,-2,-4]))
print(SolutionMaxProductSubarray().maxProduct([2,3,0,-2,-4]))
print(SolutionMaxProductSubarray().maxProduct([-1, 99]))
# print(SolutionMaxProductSubarray().maxProduct([1,2,-1,-2,2,1,-2,1]))
print(SolutionMaxProductSubarray().maxProduct([2,-2,-5,-3,4,0]))
print(SolutionMaxProductSubarray().maxProduct([0,2,2,-1,-5,1,1,5,-6,2,1,-3,-6,-6,-3,4,0]))
print('SolutionFindMinInRotatedSortedArray')
print(SolutionFindMinInRotatedSortedArray().findMin([4, 5, 6, 7, 0, 1, 2]))
print(SolutionFindMinInRotatedSortedArray().findMin([7, 0, 1]))
print(SolutionFindMinInRotatedSortedArray().findMin([4, 5, 6, 7, 8, 9, 0]))
print('SolutionIsIdenticalTree')
a = TreeNode.treeGenerator([1,2,2,4])
a[0].left = a[1]
a[0].right = a[2]
a[1].left = a[3]
b = TreeNode.treeGenerator([1,2,2,4])
b[0].left = b[1]
b[0].right = b[2]
b[1].left = b[3]
print('before - a:', a[0].treePrint())
print('before - b:: ', b[0].treePrint())
print(SolutionIsIdenticalTree().isIdentical(a[0], b[0]))
print('after - a:', a[0].treePrint())
print('after - b:: ', b[0].treePrint())
a = TreeNode.treeGenerator([1,2,2,4])
a[0].left = a[1]
a[0].right = a[2]
a[1].left = a[3]
b = TreeNode.treeGenerator([1,2,2,4])
b[0].left = b[1]
b[0].right = b[2]
b[1].right = b[3]
print('before - a:', a[0].treePrint())
print('before - b:: ', b[0].treePrint())
print(SolutionIsIdenticalTree().isIdentical(a[0], b[0]))
print('after - a:', a[0].treePrint())
print('after - b:: ', b[0].treePrint())
print('SolutionAddBinary')
print(SolutionAddBinary().addBinary("11", "1"))
print(SolutionAddBinary().addBinary("1101", "11"))
print('SolutionAnagram')
print(SolutionAnagram().anagrams(["lint", "intl", "inlt", "code"]))
print(SolutionAnagram().anagrams(["ab", "ba", "cd", "dc", "e"]))
print('SolutionUniqueBST')
print(SolutionUniqueBST().numTrees(0))
print(SolutionUniqueBST().numTrees(1))
print(SolutionUniqueBST().numTrees(2))
print(SolutionUniqueBST().numTrees(3))
print(SolutionUniqueBST().numTrees(4))
print(SolutionUniqueBST().numTrees(5))
print(SolutionUniqueBST().numTrees(6))
print(SolutionUniqueBST().numTrees(10))
print(SolutionUniqueBST().numTrees(20))
print('SolutionEvaluateReversePolishNotation')
print('6/4', 6 / 4)
print('6/-132', 6 // -132)
print('6/-132', round(6 / -132))
print(SolutionEvaluateReversePolishNotation().evalRPN(["10","6","9","3","+","-11","*","/","*","17","+","5","+"]))
print(SolutionEvaluateReversePolishNotation().evalRPN(["2", "1", "+", "3", "*"]))
print(SolutionEvaluateReversePolishNotation().evalRPN(["4", "13", "5", "/", "+"]))
print(SolutionEvaluateReversePolishNotation().evalRPN(["-78","-33","196","+","-19","-","115","+","-","-99","/","-18","8","*","-86","-","-","16","/","26","-14","-","-","47","-","101","-","163","*","143","-","0","-","171","+","120","*","-60","+","156","/","173","/","-24","11","+","21","/","*","44","*","180","70","-40","-","*","86","132","-84","+","*","-","38","/","/","21","28","/","+","83","/","-31","156","-","+","28","/","95","-","120","+","8","*","90","-","-94","*","-73","/","-62","/","93","*","196","-","-59","+","187","-","143","/","-79","-89","+","-"]))
print('SolutionSearchTargetInRotatedSortedArray')
print(SolutionSearchTargetInRotatedSortedArray().search([4, 5, 1, 2, 3], 1))
print(SolutionSearchTargetInRotatedSortedArray().search([4, 5, 1, 2, 3], 0))
print(SolutionSearchTargetInRotatedSortedArray().search([4, 5, 6, 20, 30, 0, 1, 2, 3], 25))
print('SolutionCopyRandomListNode: test case 1')
head = RandomListNode.listGenerator([5, 2, 1, 3])
head0 = head
head1 = head0.next
head2 = head1.next
head3 = head2.next
head0.random = head2
head1.random = head0
head2.random = head2
head3.random = head2
head.listPrint()
SolutionCopyRandomListNode().copyRandomList(head).listPrint()
print('SolutionCopyRandomListNode: test case 2')
head = RandomListNode.listGenerator([5])
head0 = head
head0.random = None
head.listPrint()
SolutionCopyRandomListNode().copyRandomList(head).listPrint()
print('SolutionTrappingRainWater')
print(SolutionTrappingRainWater().trapRainWater([0,1,0,2,1,0,1,3,2,1,2,1]))
# def cmp_ignore_case(s1, s2):
# m1=s1.lower()
# m2=s2.lower()
# if m1<m2:
# return -1
# if m1>m2:
# return 1
# return 0
#
# print(sorted(['bob', 'about', 'Zoo', 'Credit'], lambda x,y: cmp_ignore_case(x,y)))
# exit()
print('SolutionLargetstNumber')
print(SolutionLargetstNumber().largestNumber([91,90,9,92,90,9,89]))
print(SolutionLargetstNumber().largestNumber([5, 1, 23, 20, 4, 8]))
print(SolutionLargetstNumber().largestNumber([0,0]))
print(SolutionLargetstNumber().largestNumber([101,1]))
print(SolutionLargetstNumber().largestNumber([10, 10,1]))
print('SolutionHappyNumber')
print(SolutionHappyNumber().isHappy(19))
print(SolutionHappyNumber().isHappy(0))
print(SolutionHappyNumber().isHappy(345))
print('SolutionSingleNumberII')
print(SolutionSingleNumberII().singleNumberII([1,1,2,3,3,3,2,2,4,1]))
print('SolutionLetterCombinationOfPhoneNumber')
print(SolutionLetterCombinationOfPhoneNumber().letterCombinations('23'))
print(SolutionLetterCombinationOfPhoneNumber().letterCombinations('2279'))
print('SolutionWordSearchIn2DBoard')
print(SolutionWordSearchIn2DBoard().exist(["ABCE","SFES","ADEE"], 'ABCESEEEFS'))
print(SolutionWordSearchIn2DBoard().exist(["ABCE","SFCS","ADEE"], 'ABCCED'))
print(SolutionWordSearchIn2DBoard().exist(["ABCE","SFCS","ADEE"], 'SEE'))
print(SolutionWordSearchIn2DBoard().exist(["ABCE","SFCS","ADEE"], 'AK'))
print(SolutionWordSearchIn2DBoard().exist(["ABCE","SFCS","ADEE"], 'ABCB'))
print('SolutionDivideTwoIntegers')
print(SolutionDivideTwoIntegers().divide(-1, 1))
print(SolutionDivideTwoIntegers().divide(-1, 0))
print(SolutionDivideTwoIntegers().divide(0, 29))
print(SolutionDivideTwoIntegers().divide(9, 9))
print(SolutionDivideTwoIntegers().divide(8, 9))
print(SolutionDivideTwoIntegers().divide(18, 9))
print(SolutionDivideTwoIntegers().divide(100, 9))
print(SolutionDivideTwoIntegers().divide(100, 2))
print('SolutionIntegerToRoman')
print(SolutionIntegerToRoman().intToRoman(4))
print(SolutionIntegerToRoman().intToRoman(12))
print(SolutionIntegerToRoman().intToRoman(21))
print(SolutionIntegerToRoman().intToRoman(99))
print(SolutionIntegerToRoman().intToRoman(2199))
print('SolutionWordLadder')
print(SolutionWordLadder().ladderLength("hit", "cog", set(["hot","dot","dog","lot","log"])))
# print(SolutionWordLadder().ladderLength("sand", "acne", set(["slit","bunk","wars","ping","viva","wynn","wows","irks","gang","pool","mock","fort","heel","send","ship","cols","alec","foal","nabs","gaze","giza","mays","dogs","karo","cums","jedi","webb","lend","mire","jose","catt","grow","toss","magi","leis","bead","kara","hoof","than","ires","baas","vein","kari","riga","oars","gags","thug","yawn","wive","view","germ","flab","july","tuck","rory","bean","feed","rhee","jeez","gobs","lath","desk","yoko","cute","zeus","thus","dims","link","dirt","mara","disc","limy","lewd","maud","duly","elsa","hart","rays","rues","camp","lack","okra","tome","math","plug","monk","orly","friz","hogs","yoda","poop","tick","plod","cloy","pees","imps","lead","pope","mall","frey","been","plea","poll","male","teak","soho","glob","bell","mary","hail","scan","yips","like","mull","kory","odor","byte","kaye","word","honk","asks","slid","hopi","toke","gore","flew","tins","mown","oise","hall","vega","sing","fool","boat","bobs","lain","soft","hard","rots","sees","apex","chan","told","woos","unit","scow","gilt","beef","jars","tyre","imus","neon","soap","dabs","rein","ovid","hose","husk","loll","asia","cope","tail","hazy","clad","lash","sags","moll","eddy","fuel","lift","flog","land","sigh","saks","sail","hook","visa","tier","maws","roeg","gila","eyes","noah","hypo","tore","eggs","rove","chap","room","wait","lurk","race","host","dada","lola","gabs","sobs","joel","keck","axed","mead","gust","laid","ends","oort","nose","peer","kept","abet","iran","mick","dead","hags","tens","gown","sick","odis","miro","bill","fawn","sumo","kilt","huge","ores","oran","flag","tost","seth","sift","poet","reds","pips","cape","togo","wale","limn","toll","ploy","inns","snag","hoes","jerk","flux","fido","zane","arab","gamy","raze","lank","hurt","rail","hind","hoot","dogy","away","pest","hoed","pose","lose","pole","alva","dino","kind","clan","dips","soup","veto","edna","damp","gush","amen","wits","pubs","fuzz","cash","pine","trod","gunk","nude","lost","rite","cory","walt","mica","cart","avow","wind","book","leon","life","bang","draw","leek","skis","dram","ripe","mine","urea","tiff","over","gale","weir","defy","norm","tull","whiz","gill","ward","crag","when","mill","firs","sans","flue","reid","ekes","jain","mutt","hems","laps","piss","pall","rowe","prey","cull","knew","size","wets","hurl","wont","suva","girt","prys","prow","warn","naps","gong","thru","livy","boar","sade","amok","vice","slat","emir","jade","karl","loyd","cerf","bess","loss","rums","lats","bode","subs","muss","maim","kits","thin","york","punt","gays","alpo","aids","drag","eras","mats","pyre","clot","step","oath","lout","wary","carp","hums","tang","pout","whip","fled","omar","such","kano","jake","stan","loop","fuss","mini","byrd","exit","fizz","lire","emil","prop","noes","awed","gift","soli","sale","gage","orin","slur","limp","saar","arks","mast","gnat","port","into","geed","pave","awls","cent","cunt","full","dint","hank","mate","coin","tars","scud","veer","coax","bops","uris","loom","shod","crib","lids","drys","fish","edit","dick","erna","else","hahs","alga","moho","wire","fora","tums","ruth","bets","duns","mold","mush","swop","ruby","bolt","nave","kite","ahem","brad","tern","nips","whew","bait","ooze","gino","yuck","drum","shoe","lobe","dusk","cult","paws","anew","dado","nook","half","lams","rich","cato","java","kemp","vain","fees","sham","auks","gish","fire","elam","salt","sour","loth","whit","yogi","shes","scam","yous","lucy","inez","geld","whig","thee","kelp","loaf","harm","tomb","ever","airs","page","laud","stun","paid","goop","cobs","judy","grab","doha","crew","item","fogs","tong","blip","vest","bran","wend","bawl","feel","jets","mixt","tell","dire","devi","milo","deng","yews","weak","mark","doug","fare","rigs","poke","hies","sian","suez","quip","kens","lass","zips","elva","brat","cosy","teri","hull","spun","russ","pupa","weed","pulp","main","grim","hone","cord","barf","olav","gaps","rote","wilt","lars","roll","balm","jana","give","eire","faun","suck","kegs","nita","weer","tush","spry","loge","nays","heir","dope","roar","peep","nags","ates","bane","seas","sign","fred","they","lien","kiev","fops","said","lawn","lind","miff","mass","trig","sins","furl","ruin","sent","cray","maya","clog","puns","silk","axis","grog","jots","dyer","mope","rand","vend","keen","chou","dose","rain","eats","sped","maui","evan","time","todd","skit","lief","sops","outs","moot","faze","biro","gook","fill","oval","skew","veil","born","slob","hyde","twin","eloy","beat","ergs","sure","kobe","eggo","hens","jive","flax","mons","dunk","yest","begs","dial","lodz","burp","pile","much","dock","rene","sago","racy","have","yalu","glow","move","peps","hods","kins","salk","hand","cons","dare","myra","sega","type","mari","pelt","hula","gulf","jugs","flay","fest","spat","toms","zeno","taps","deny","swag","afro","baud","jabs","smut","egos","lara","toes","song","fray","luis","brut","olen","mere","ruff","slum","glad","buds","silt","rued","gelt","hive","teem","ides","sink","ands","wisp","omen","lyre","yuks","curb","loam","darn","liar","pugs","pane","carl","sang","scar","zeds","claw","berg","hits","mile","lite","khan","erik","slug","loon","dena","ruse","talk","tusk","gaol","tads","beds","sock","howe","gave","snob","ahab","part","meir","jell","stir","tels","spit","hash","omit","jinx","lyra","puck","laue","beep","eros","owed","cede","brew","slue","mitt","jest","lynx","wads","gena","dank","volt","gray","pony","veld","bask","fens","argo","work","taxi","afar","boon","lube","pass","lazy","mist","blot","mach","poky","rams","sits","rend","dome","pray","duck","hers","lure","keep","gory","chat","runt","jams","lays","posy","bats","hoff","rock","keri","raul","yves","lama","ramp","vote","jody","pock","gist","sass","iago","coos","rank","lowe","vows","koch","taco","jinn","juno","rape","band","aces","goal","huck","lila","tuft","swan","blab","leda","gems","hide","tack","porn","scum","frat","plum","duds","shad","arms","pare","chin","gain","knee","foot","line","dove","vera","jays","fund","reno","skid","boys","corn","gwyn","sash","weld","ruiz","dior","jess","leaf","pars","cote","zing","scat","nice","dart","only","owls","hike","trey","whys","ding","klan","ross","barb","ants","lean","dopy","hock","tour","grip","aldo","whim","prom","rear","dins","duff","dell","loch","lava","sung","yank","thar","curl","venn","blow","pomp","heat","trap","dali","nets","seen","gash","twig","dads","emmy","rhea","navy","haws","mite","bows","alas","ives","play","soon","doll","chum","ajar","foam","call","puke","kris","wily","came","ales","reef","raid","diet","prod","prut","loot","soar","coed","celt","seam","dray","lump","jags","nods","sole","kink","peso","howl","cost","tsar","uric","sore","woes","sewn","sake","cask","caps","burl","tame","bulk","neva","from","meet","webs","spar","fuck","buoy","wept","west","dual","pica","sold","seed","gads","riff","neck","deed","rudy","drop","vale","flit","romp","peak","jape","jews","fain","dens","hugo","elba","mink","town","clam","feud","fern","dung","newt","mime","deem","inti","gigs","sosa","lope","lard","cara","smug","lego","flex","doth","paar","moon","wren","tale","kant","eels","muck","toga","zens","lops","duet","coil","gall","teal","glib","muir","ails","boer","them","rake","conn","neat","frog","trip","coma","must","mono","lira","craw","sled","wear","toby","reel","hips","nate","pump","mont","died","moss","lair","jibe","oils","pied","hobs","cads","haze","muse","cogs","figs","cues","roes","whet","boru","cozy","amos","tans","news","hake","cots","boas","tutu","wavy","pipe","typo","albs","boom","dyke","wail","woke","ware","rita","fail","slab","owes","jane","rack","hell","lags","mend","mask","hume","wane","acne","team","holy","runs","exes","dole","trim","zola","trek","puma","wacs","veep","yaps","sums","lush","tubs","most","witt","bong","rule","hear","awry","sots","nils","bash","gasp","inch","pens","fies","juts","pate","vine","zulu","this","bare","veal","josh","reek","ours","cowl","club","farm","teat","coat","dish","fore","weft","exam","vlad","floe","beak","lane","ella","warp","goth","ming","pits","rent","tito","wish","amps","says","hawk","ways","punk","nark","cagy","east","paul","bose","solo","teed","text","hews","snip","lips","emit","orgy","icon","tuna","soul","kurd","clod","calk","aunt","bake","copy","acid","duse","kiln","spec","fans","bani","irma","pads","batu","logo","pack","oder","atop","funk","gide","bede","bibs","taut","guns","dana","puff","lyme","flat","lake","june","sets","gull","hops","earn","clip","fell","kama","seal","diaz","cite","chew","cuba","bury","yard","bank","byes","apia","cree","nosh","judo","walk","tape","taro","boot","cods","lade","cong","deft","slim","jeri","rile","park","aeon","fact","slow","goff","cane","earp","tart","does","acts","hope","cant","buts","shin","dude","ergo","mode","gene","lept","chen","beta","eden","pang","saab","fang","whir","cove","perk","fads","rugs","herb","putt","nous","vane","corm","stay","bids","vela","roof","isms","sics","gone","swum","wiry","cram","rink","pert","heap","sikh","dais","cell","peel","nuke","buss","rasp","none","slut","bent","dams","serb","dork","bays","kale","cora","wake","welt","rind","trot","sloe","pity","rout","eves","fats","furs","pogo","beth","hued","edam","iamb","glee","lute","keel","airy","easy","tire","rube","bogy","sine","chop","rood","elbe","mike","garb","jill","gaul","chit","dons","bars","ride","beck","toad","make","head","suds","pike","snot","swat","peed","same","gaza","lent","gait","gael","elks","hang","nerf","rosy","shut","glop","pain","dion","deaf","hero","doer","wost","wage","wash","pats","narc","ions","dice","quay","vied","eons","case","pour","urns","reva","rags","aden","bone","rang","aura","iraq","toot","rome","hals","megs","pond","john","yeps","pawl","warm","bird","tint","jowl","gibe","come","hold","pail","wipe","bike","rips","eery","kent","hims","inks","fink","mott","ices","macy","serf","keys","tarp","cops","sods","feet","tear","benz","buys","colo","boil","sews","enos","watt","pull","brag","cork","save","mint","feat","jamb","rubs","roxy","toys","nosy","yowl","tamp","lobs","foul","doom","sown","pigs","hemp","fame","boor","cube","tops","loco","lads","eyre","alta","aged","flop","pram","lesa","sawn","plow","aral","load","lied","pled","boob","bert","rows","zits","rick","hint","dido","fist","marc","wuss","node","smog","nora","shim","glut","bale","perl","what","tort","meek","brie","bind","cake","psst","dour","jove","tree","chip","stud","thou","mobs","sows","opts","diva","perm","wise","cuds","sols","alan","mild","pure","gail","wins","offs","nile","yelp","minn","tors","tran","homy","sadr","erse","nero","scab","finn","mich","turd","then","poem","noun","oxus","brow","door","saws","eben","wart","wand","rosa","left","lina","cabs","rapt","olin","suet","kalb","mans","dawn","riel","temp","chug","peal","drew","null","hath","many","took","fond","gate","sate","leak","zany","vans","mart","hess","home","long","dirk","bile","lace","moog","axes","zone","fork","duct","rico","rife","deep","tiny","hugh","bilk","waft","swig","pans","with","kern","busy","film","lulu","king","lord","veda","tray","legs","soot","ells","wasp","hunt","earl","ouch","diem","yell","pegs","blvd","polk","soda","zorn","liza","slop","week","kill","rusk","eric","sump","haul","rims","crop","blob","face","bins","read","care","pele","ritz","beau","golf","drip","dike","stab","jibs","hove","junk","hoax","tats","fief","quad","peat","ream","hats","root","flak","grit","clap","pugh","bosh","lock","mute","crow","iced","lisa","bela","fems","oxes","vies","gybe","huff","bull","cuss","sunk","pups","fobs","turf","sect","atom","debt","sane","writ","anon","mayo","aria","seer","thor","brim","gawk","jack","jazz","menu","yolk","surf","libs","lets","bans","toil","open","aced","poor","mess","wham","fran","gina","dote","love","mood","pale","reps","ines","shot","alar","twit","site","dill","yoga","sear","vamp","abel","lieu","cuff","orbs","rose","tank","gape","guam","adar","vole","your","dean","dear","hebe","crab","hump","mole","vase","rode","dash","sera","balk","lela","inca","gaea","bush","loud","pies","aide","blew","mien","side","kerr","ring","tess","prep","rant","lugs","hobo","joke","odds","yule","aida","true","pone","lode","nona","weep","coda","elmo","skim","wink","bras","pier","bung","pets","tabs","ryan","jock","body","sofa","joey","zion","mace","kick","vile","leno","bali","fart","that","redo","ills","jogs","pent","drub","slaw","tide","lena","seep","gyps","wave","amid","fear","ties","flan","wimp","kali","shun","crap","sage","rune","logs","cain","digs","abut","obit","paps","rids","fair","hack","huns","road","caws","curt","jute","fisk","fowl","duty","holt","miss","rude","vito","baal","ural","mann","mind","belt","clem","last","musk","roam","abed","days","bore","fuze","fall","pict","dump","dies","fiat","vent","pork","eyed","docs","rive","spas","rope","ariz","tout","game","jump","blur","anti","lisp","turn","sand","food","moos","hoop","saul","arch","fury","rise","diss","hubs","burs","grid","ilks","suns","flea","soil","lung","want","nola","fins","thud","kidd","juan","heps","nape","rash","burt","bump","tots","brit","mums","bole","shah","tees","skip","limb","umps","ache","arcs","raft","halo","luce","bahs","leta","conk","duos","siva","went","peek","sulk","reap","free","dubs","lang","toto","hasp","ball","rats","nair","myst","wang","snug","nash","laos","ante","opal","tina","pore","bite","haas","myth","yugo","foci","dent","bade","pear","mods","auto","shop","etch","lyly","curs","aron","slew","tyro","sack","wade","clio","gyro","butt","icky","char","itch","halt","gals","yang","tend","pact","bees","suit","puny","hows","nina","brno","oops","lick","sons","kilo","bust","nome","mona","dull","join","hour","papa","stag","bern","wove","lull","slip","laze","roil","alto","bath","buck","alma","anus","evil","dumb","oreo","rare","near","cure","isis","hill","kyle","pace","comb","nits","flip","clop","mort","thea","wall","kiel","judd","coop","dave","very","amie","blah","flub","talc","bold","fogy","idea","prof","horn","shoo","aped","pins","helm","wees","beer","womb","clue","alba","aloe","fine","bard","limo","shaw","pint","swim","dust","indy","hale","cats","troy","wens","luke","vern","deli","both","brig","daub","sara","sued","bier","noel","olga","dupe","look","pisa","knox","murk","dame","matt","gold","jame","toge","luck","peck","tass","calf","pill","wore","wadi","thur","parr","maul","tzar","ones","lees","dark","fake","bast","zoom","here","moro","wine","bums","cows","jean","palm","fume","plop","help","tuba","leap","cans","back","avid","lice","lust","polo","dory","stew","kate","rama","coke","bled","mugs","ajax","arts","drug","pena","cody","hole","sean","deck","guts","kong","bate","pitt","como","lyle","siam","rook","baby","jigs","bret","bark","lori","reba","sups","made","buzz","gnaw","alps","clay","post","viol","dina","card","lana","doff","yups","tons","live","kids","pair","yawl","name","oven","sirs","gyms","prig","down","leos","noon","nibs","cook","safe","cobb","raja","awes","sari","nerd","fold","lots","pete","deal","bias","zeal","girl","rage","cool","gout","whey","soak","thaw","bear","wing","nagy","well","oink","sven","kurt","etna","held","wood","high","feta","twee","ford","cave","knot","tory","ibis","yaks","vets","foxy","sank","cone","pius","tall","seem","wool","flap","gird","lore","coot","mewl","sere","real","puts","sell","nuts","foil","lilt","saga","heft","dyed","goat","spew","daze","frye","adds","glen","tojo","pixy","gobi","stop","tile","hiss","shed","hahn","baku","ahas","sill","swap","also","carr","manx","lime","debs","moat","eked","bola","pods","coon","lacy","tube","minx","buff","pres","clew","gaff","flee","burn","whom","cola","fret","purl","wick","wigs","donn","guys","toni","oxen","wite","vial","spam","huts","vats","lima","core","eula","thad","peon","erie","oats","boyd","cued","olaf","tams","secs","urey","wile","penn","bred","rill","vary","sues","mail","feds","aves","code","beam","reed","neil","hark","pols","gris","gods","mesa","test","coup","heed","dora","hied","tune","doze","pews","oaks","bloc","tips","maid","goof","four","woof","silo","bray","zest","kiss","yong","file","hilt","iris","tuns","lily","ears","pant","jury","taft","data","gild","pick","kook","colt","bohr","anal","asps","babe","bach","mash","biko","bowl","huey","jilt","goes","guff","bend","nike","tami","gosh","tike","gees","urge","path","bony","jude","lynn","lois","teas","dunn","elul","bonn","moms","bugs","slay","yeah","loan","hulk","lows","damn","nell","jung","avis","mane","waco","loin","knob","tyke","anna","hire","luau","tidy","nuns","pots","quid","exec","hans","hera","hush","shag","scot","moan","wald","ursa","lorn","hunk","loft","yore","alum","mows","slog","emma","spud","rice","worn","erma","need","bags","lark","kirk","pooh","dyes","area","dime","luvs","foch","refs","cast","alit","tugs","even","role","toed","caph","nigh","sony","bide","robs","folk","daft","past","blue","flaw","sana","fits","barr","riot","dots","lamp","cock","fibs","harp","tent","hate","mali","togs","gear","tues","bass","pros","numb","emus","hare","fate","wife","mean","pink","dune","ares","dine","oily","tony","czar","spay","push","glum","till","moth","glue","dive","scad","pops","woks","andy","leah","cusp","hair","alex","vibe","bulb","boll","firm","joys","tara","cole","levy","owen","chow","rump","jail","lapp","beet","slap","kith","more","maps","bond","hick","opus","rust","wist","shat","phil","snow","lott","lora","cary","mote","rift","oust","klee","goad","pith","heep","lupe","ivan","mimi","bald","fuse","cuts","lens","leer","eyry","know","razz","tare","pals","geek","greg","teen","clef","wags","weal","each","haft","nova","waif","rate","katy","yale","dale","leas","axum","quiz","pawn","fend","capt","laws","city","chad","coal","nail","zaps","sort","loci","less","spur","note","foes","fags","gulp","snap","bogs","wrap","dane","melt","ease","felt","shea","calm","star","swam","aery","year","plan","odin","curd","mira","mops","shit","davy","apes","inky","hues","lome","bits","vila","show","best","mice","gins","next","roan","ymir","mars","oman","wild","heal","plus","erin","rave","robe","fast","hutu","aver","jodi","alms","yams","zero","revs","wean","chic","self","jeep","jobs","waxy","duel","seek","spot","raps","pimp","adan","slam","tool","morn","futz","ewes","errs","knit","rung","kans","muff","huhs","tows","lest","meal","azov","gnus","agar","sips","sway","otis","tone","tate","epic","trio","tics","fade","lear","owns","robt","weds","five","lyon","terr","arno","mama","grey","disk","sept","sire","bart","saps","whoa","turk","stow","pyle","joni","zinc","negs","task","leif","ribs","malt","nine","bunt","grin","dona","nope","hams","some","molt","smit","sacs","joan","slav","lady","base","heck","list","take","herd","will","nubs","burg","hugs","peru","coif","zoos","nick","idol","levi","grub","roth","adam","elma","tags","tote","yaws","cali","mete","lula","cubs","prim","luna","jolt","span","pita","dodo","puss","deer","term","dolt","goon","gary","yarn","aims","just","rena","tine","cyst","meld","loki","wong","were","hung","maze","arid","cars","wolf","marx","faye","eave","raga","flow","neal","lone","anne","cage","tied","tilt","soto","opel","date","buns","dorm","kane","akin","ewer","drab","thai","jeer","grad","berm","rods","saki","grus","vast","late","lint","mule","risk","labs","snit","gala","find","spin","ired","slot","oafs","lies","mews","wino","milk","bout","onus","tram","jaws","peas","cleo","seat","gums","cold","vang","dewy","hood","rush","mack","yuan","odes","boos","jami","mare","plot","swab","borg","hays","form","mesh","mani","fife","good","gram","lion","myna","moor","skin","posh","burr","rime","done","ruts","pays","stem","ting","arty","slag","iron","ayes","stub","oral","gets","chid","yens","snub","ages","wide","bail","verb","lamb","bomb","army","yoke","gels","tits","bork","mils","nary","barn","hype","odom","avon","hewn","rios","cams","tact","boss","oleo","duke","eris","gwen","elms","deon","sims","quit","nest","font","dues","yeas","zeta","bevy","gent","torn","cups","worm","baum","axon","purr","vise","grew","govs","meat","chef","rest","lame"])))
print('SolutionSpiralMatrix')
print(SolutionSpiralMatrix().spiralOrder([
[ 1, 2, 3 ],
[ 4, 5, 6 ],
[ 7, 8, 9 ]
]))
print(SolutionSpiralMatrix().spiralOrder([]))
print(SolutionSpiralMatrix().spiralOrder([[1]]))
print(SolutionSpiralMatrix().spiralOrder([[1,2]]))
print(SolutionSpiralMatrix().spiralOrder([[1],[2]]))
print('\nEND')
print('SolutionSprialMatrixII')
print(SolutionSprialMatrixII().generateMatrix(3))
print(SolutionSprialMatrixII().generateMatrix(0))
print(SolutionSprialMatrixII().generateMatrix(1))
print('SolutionGenerateParentthese')
print(SolutionGenerateParentthese().generateParenthesis(0))
print(SolutionGenerateParentthese().generateParenthesis(1))
print(SolutionGenerateParentthese().generateParenthesis(3))
print(SolutionGenerateParentthese().generateParenthesis(5))
print('SolutionLinkedListCycleII')
head = ListNode.listGenerator([0, 1, 2, 3, 4])
head.next.next.next.next = head.next.next # 4 --> 2
print(SolutionLinkedListCycleII().detectCycle(head))
head = ListNode.listGenerator([0, 1, 2, 3, 4])
print(SolutionLinkedListCycleII().detectCycle(head))
print('SolutionEditDistance')
print(SolutionEditDistance().minDistance('abc', 'kkabc'))
print(SolutionEditDistance().minDistance('mart', 'karma'))
print(SolutionEditDistance().minDistance("pneumonoultramicroscopicsilicovolcanoconiosis", "ultramicroscopically"))
print('SolutionLongestConsecutiveSequence')
print(SolutionLongestConsecutiveSequence().longestConsecutive([100, 4, 200, 1, 3, 2]))
print('SolutionFirstMissingPositive')
print(SolutionFirstMissingPositive().firstMissingPositive([1,0,-1]))
print(SolutionFirstMissingPositive().firstMissingPositive([1,2,0]))
print(SolutionFirstMissingPositive().firstMissingPositive([3,4,-1,1]))
print(SolutionFirstMissingPositive().firstMissingPositive([0,6,1,2,3,4]))
print(SolutionFirstMissingPositive().firstMissingPositive([2,3,4,0,6]))
print(SolutionFirstMissingPositive().firstMissingPositive([1,2,3,4,0,6]))
print(SolutionFirstMissingPositive().firstMissingPositive([1,2,3,1,1]))
print(SolutionFirstMissingPositive().firstMissingPositive([2,2,3,3]))
print('SolutionPalindromeLinkedList')
print(SolutionPalindromeLinkedList().isPalindrome(ListNode.listGenerator([])))
print(SolutionPalindromeLinkedList().isPalindrome(ListNode.listGenerator([1, 2, 1])))
print(SolutionPalindromeLinkedList().isPalindrome(ListNode.listGenerator([1, 2, 3])))
print(SolutionPalindromeLinkedList().isPalindrome(ListNode.listGenerator([1, 2, 2, 1])))
print(SolutionPalindromeLinkedList().isPalindrome(ListNode.listGenerator([1, 2, 3, 2, 1])))
print(SolutionPalindromeLinkedList().isPalindrome(ListNode.listGenerator([1, 2, 3, 3, 1])))
print(SolutionPalindromeLinkedList().isPalindrome(ListNode.listGenerator([1, 2, 3, 4, 3, 2, 1])))
print('SolutionNumberOfIslands')
print(SolutionNumberOfIslands().numIslands([
[1, 1, 0, 0, 0],
[0, 1, 0, 0, 1],
[0, 0, 0, 1, 1],
[0, 0, 0, 0, 0],
[0, 0, 0, 0, 1]
]
))
print(SolutionNumberOfIslands().numIslands([
[1,1,1,1,1,1],
[1,0,0,0,0,1],
[1,0,1,1,0,1],
[1,0,0,0,0,1],
[1,1,1,1,1,1]
]
))
print(SolutionNumberOfIslands().numIslands([
[1,0,0,1,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0],
[1,0,0,1,1,0,0,1,0,0,0,1,0,1,0,1,0,0,1,0],
[0,0,0,1,1,1,1,0,1,0,1,1,0,0,0,0,1,0,1,0],
[0,0,0,1,1,0,0,1,0,0,0,1,1,1,0,0,1,0,0,1],
[0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0],
[1,0,0,0,0,1,0,1,0,1,1,0,0,0,0,0,0,1,0,1],
[0,0,0,1,0,0,0,1,0,1,0,1,0,1,0,1,0,1,0,1],
[0,0,0,1,0,1,0,0,1,1,0,1,0,1,1,0,1,1,1,0],
[0,0,0,0,1,0,0,1,1,0,0,0,0,1,0,0,0,1,0,1],
[0,0,1,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,1,0],
[1,0,0,1,0,0,0,0,0,0,0,1,0,0,1,0,1,0,1,0],
[0,1,0,0,0,1,0,1,0,1,1,0,1,1,1,0,1,1,0,0],
[1,1,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,1],
[0,1,0,0,1,1,1,0,0,0,1,1,1,1,1,0,1,0,0,0],
[0,0,1,1,1,0,0,0,1,1,0,0,0,1,0,1,0,0,0,0],
[1,0,0,1,0,1,0,0,0,0,1,0,0,0,1,0,1,0,1,1],
[1,0,1,0,0,0,0,0,0,1,0,0,0,1,0,1,0,0,0,0],
[0,1,1,0,0,0,1,1,1,0,1,0,1,0,1,1,1,1,0,0],
[0,1,0,0,0,0,1,1,0,0,1,0,1,0,0,1,0,0,1,1],
[0,0,0,0,0,0,1,1,1,1,0,1,0,0,0,1,1,0,0,0]
]
))
print(SolutionNumberOfIslands().numIslands([
[0,1,0,0,1,1,1,0,0,0,0,0,1,0,0,0,0,1,0,1],
[1,0,1,0,0,1,1,0,0,1,0,1,0,1,0,1,1,0,0,0],
[0,1,0,0,0,1,1,1,1,0,0,0,0,0,1,1,1,1,0,1],
[1,1,0,0,0,1,1,0,0,0,1,1,1,0,0,1,0,1,1,0],
[0,1,0,1,1,0,1,0,0,0,1,0,0,1,0,0,0,0,0,1],
[1,0,0,1,0,1,0,0,0,1,1,0,1,0,0,1,0,0,0,0],
[1,0,0,0,1,1,0,0,0,0,0,1,0,0,1,0,0,0,0,1],
[1,0,0,0,1,0,1,1,1,0,1,0,1,1,1,1,0,0,0,1],
[1,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,1],
[0,0,0,1,0,1,1,1,1,1,1,1,1,1,0,0,0,0,1,0],
[1,0,1,0,1,0,0,1,1,1,0,1,1,0,0,1,1,0,0,0],
[0,1,0,0,1,0,0,0,0,0,0,1,1,1,1,0,0,0,1,0],
[1,0,0,0,1,1,1,0,1,0,0,0,1,0,1,0,1,0,0,1],
[0,0,0,0,1,0,1,1,0,1,0,1,0,1,1,1,1,0,0,0],
[0,1,1,0,0,0,0,1,0,0,1,1,1,0,0,1,1,0,1,0],
[1,0,1,1,1,1,1,1,0,1,1,0,1,0,0,1,0,0,0,1],
[1,0,0,0,1,0,1,0,0,1,0,1,0,0,1,0,0,1,1,1],
[0,0,1,0,0,0,0,1,0,0,1,1,0,1,1,1,0,0,0,0],
[0,0,1,0,0,0,0,0,0,1,1,0,1,0,1,0,0,0,1,1],
[1,0,0,0,1,0,1,1,1,0,0,1,0,1,0,1,1,0,0,0]
]
))
print('SolutionHasCycle')
head = ListNode.listGenerator([-21, 10, 4, 5])
head0 = head
head1 = head0.next
head2 = head1.next
head3 = head2.next
head3.next = head1
print(SolutionHasCycle().hasCycle(head))
head = ListNode.listGenerator([-21, 10, 4, 5])
head0 = head
head1 = head0.next
head2 = head1.next
head3 = head2.next
#head3.next = head1
print(SolutionHasCycle().hasCycle(head))
t = TreeNode.treeGenerator([1,2,3,4,5])
t[0].left = t[1]
t[0].right = t[2]
t[2].left = t[3]
t[2].right = t[4]
print('SolutionMaxDepth')
print(SolutionMaxDepth().maxDepth(t[0]))
print(SolutionMaxDepth().maxDepth(None))
print('SolutionReverseWordsInAString')
print(SolutionReverseWordsInAString().reverseWords('the sky is blue'))
print('SolutionValidSudoku')
print(SolutionValidSudoku().isValidSudoku([".87654321","2........","3........","4........","5........","6........","7........","8........","9........"]
))
print(SolutionValidSudoku().isValidSudoku(["....5..1.",".4.3.....",".....3..1","8......2.","..2.7....",".15......",".....2...",".2.9.....","..4......"]
))
print('SolutionDecodeWays')
print(SolutionDecodeWays().numDecodings('102'))
print(SolutionDecodeWays().numDecodings('100'))
print(SolutionDecodeWays().numDecodings('19261001'))
print(SolutionDecodeWays().numDecodings('11111878787676172120121101212918291829819'))
print(SolutionDecodeWays().numDecodings('11'))
print(SolutionDecodeWays().numDecodings('1110'))
print(SolutionDecodeWays().numDecodings('10'))
print(SolutionDecodeWays().numDecodings('12'))
print(SolutionDecodeWays().numDecodings('123'))
print(SolutionDecodeWays().numDecodings('11222'))
print(SolutionDecodeWays().numDecodings('11222121'))
print('SolutionBinaryTreeMaximumPathSum')
# Given the below binary tree:
# 1
# / \
# 2 3
# return 6.
t = TreeNode.treeGenerator([1,2,3])
t[0].left = t[1]
t[0].right = t[2]
print(SolutionBinaryTreeMaximumPathSum().maxPathSum(t[0]))
# Given the below binary tree:
# 2
# / \
# 4 3
# / \
# 5 1
# return 14.
t = TreeNode.treeGenerator([2,4,3,5,1])
t[0].left = t[1]
t[0].right = t[2]
t[2].left = t[3]
t[2].right = t[4]
print(SolutionBinaryTreeMaximumPathSum().maxPathSum(t[0]))
# {-10,-20,#,#,-31,-24,-5,#,#,-6,-7,-8,-9}
t = TreeNode.treeGenerator([-10,-20,-31,-24,-5,-6,-7,-8,-9])
# 0 1 2 3 4 5 6 7 8
t[0].left = t[1]
t[1].right = t[2]
t[2].left = t[3]
t[2].right = t[4]
t[4].left = t[5]
t[4].right = t[6]
t[5].left = t[7]
t[5].left = t[8]
print(SolutionBinaryTreeMaximumPathSum().maxPathSum(t[0]))
print('SolutionMinimumPathSum')
grid = [[1]]
print(SolutionMinimumPathSum_TLE().minPathSum(grid))
print(SolutionMinimumPathSum().minPathSum(grid))
grid = []
print(SolutionMinimumPathSum_TLE().minPathSum(grid))
print(SolutionMinimumPathSum().minPathSum(grid))
grid = [[2,6,7],[3,2,1],[4,1,6]]
print(SolutionMinimumPathSum_TLE().minPathSum(grid))
print(SolutionMinimumPathSum().minPathSum(grid))
grid = [[0,3,8,5,5,1,5,3,3,6,7,5,9,4,6,5,6,8,2,4,2,5,5,3,7,4,8,5,0,2,5,2,5,5,7,2,6,3,5,1,9,4,8,8,9,5,6,7,5,0,3,9,6,9,2,5,5,2,0,8,4,7,0,2,2,0,4,1,3,2,2,4,6,1,5,7,8,1,7,3,1,0,4,9,1,6,4,9,8,6,7,2,3,9,6,8,9,3,9,4,7,3,9,3,6,4,3,4,5,2,9,8,2,3,8,4,9,4,3,9,1,2,4,4,1,0,4,3,5,5,7,2,9,6,8,5,0,1,2,7,3,1,8,7,5,8,1,6,2,6,8,3,8,4,0,2,6,4,5,2,0,2,4,9,1,2,6,3,5,8,3,0,2,1,8,9,9,1,5,1,8,5,5,8,9,5,0,6,1,7,8,1,2,4,2,3,7,9,8,2],[0,3,8,5,5,1,5,3,3,6,7,5,9,4,6,5,6,8,2,4,2,5,5,3,7,4,8,5,0,2,5,2,5,5,7,2,6,3,5,1,9,4,8,8,9,5,6,7,5,0,3,9,6,9,2,5,5,2,0,8,4,7,0,2,2,0,4,1,3,2,2,4,6,1,5,7,8,1,7,3,1,0,4,9,1,6,4,9,8,6,7,2,3,9,6,8,9,3,9,4,7,3,9,3,6,4,3,4,5,2,9,8,2,3,8,4,9,4,3,9,1,2,4,4,1,0,4,3,5,5,7,2,9,6,8,5,0,1,2,7,3,1,8,7,5,8,1,6,2,6,8,3,8,4,0,2,6,4,5,2,0,2,4,9,1,2,6,3,5,8,3,0,2,1,8,9,9,1,5,1,8,5,5,8,9,5,0,6,1,7,8,1,2,4,2,3,7,9,8,2],[0,3,8,5,5,1,5,3,3,6,7,5,9,4,6,5,6,8,2,4,2,5,5,3,7,4,8,5,0,2,5,2,5,5,7,2,6,3,5,1,9,4,8,8,9,5,6,7,5,0,3,9,6,9,2,5,5,2,0,8,4,7,0,2,2,0,4,1,3,2,2,4,6,1,5,7,8,1,7,3,1,0,4,9,1,6,4,9,8,6,7,2,3,9,6,8,9,3,9,4,7,3,9,3,6,4,3,4,5,2,9,8,2,3,8,4,9,4,3,9,1,2,4,4,1,0,4,3,5,5,7,2,9,6,8,5,0,1,2,7,3,1,8,7,5,8,1,6,2,6,8,3,8,4,0,2,6,4,5,2,0,2,4,9,1,2,6,3,5,8,3,0,2,1,8,9,9,1,5,1,8,5,5,8,9,5,0,6,1,7,8,1,2,4,2,3,7,9,8,2],[0,3,8,5,5,1,5,3,3,6,7,5,9,4,6,5,6,8,2,4,2,5,5,3,7,4,8,5,0,2,5,2,5,5,7,2,6,3,5,1,9,4,8,8,9,5,6,7,5,0,3,9,6,9,2,5,5,2,0,8,4,7,0,2,2,0,4,1,3,2,2,4,6,1,5,7,8,1,7,3,1,0,4,9,1,6,4,9,8,6,7,2,3,9,6,8,9,3,9,4,7,3,9,3,6,4,3,4,5,2,9,8,2,3,8,4,9,4,3,9,1,2,4,4,1,0,4,3,5,5,7,2,9,6,8,5,0,1,2,7,3,1,8,7,5,8,1,6,2,6,8,3,8,4,0,2,6,4,5,2,0,2,4,9,1,2,6,3,5,8,3,0,2,1,8,9,9,1,5,1,8,5,5,8,9,5,0,6,1,7,8,1,2,4,2,3,7,9,8,2],[0,3,8,5,5,1,5,3,3,6,7,5,9,4,6,5,6,8,2,4,2,5,5,3,7,4,8,5,0,2,5,2,5,5,7,2,6,3,5,1,9,4,8,8,9,5,6,7,5,0,3,9,6,9,2,5,5,2,0,8,4,7,0,2,2,0,4,1,3,2,2,4,6,1,5,7,8,1,7,3,1,0,4,9,1,6,4,9,8,6,7,2,3,9,6,8,9,3,9,4,7,3,9,3,6,4,3,4,5,2,9,8,2,3,8,4,9,4,3,9,1,2,4,4,1,0,4,3,5,5,7,2,9,6,8,5,0,1,2,7,3,1,8,7,5,8,1,6,2,6,8,3,8,4,0,2,6,4,5,2,0,2,4,9,1,2,6,3,5,8,3,0,2,1,8,9,9,1,5,1,8,5,5,8,9,5,0,6,1,7,8,1,2,4,2,3,7,9,8,2],[0,3,8,5,5,1,5,3,3,6,7,5,9,4,6,5,6,8,2,4,2,5,5,3,7,4,8,5,0,2,5,2,5,5,7,2,6,3,5,1,9,4,8,8,9,5,6,7,5,0,3,9,6,9,2,5,5,2,0,8,4,7,0,2,2,0,4,1,3,2,2,4,6,1,5,7,8,1,7,3,1,0,4,9,1,6,4,9,8,6,7,2,3,9,6,8,9,3,9,4,7,3,9,3,6,4,3,4,5,2,9,8,2,3,8,4,9,4,3,9,1,2,4,4,1,0,4,3,5,5,7,2,9,6,8,5,0,1,2,7,3,1,8,7,5,8,1,6,2,6,8,3,8,4,0,2,6,4,5,2,0,2,4,9,1,2,6,3,5,8,3,0,2,1,8,9,9,1,5,1,8,5,5,8,9,5,0,6,1,7,8,1,2,4,2,3,7,9,8,2],[0,3,8,5,5,1,5,3,3,6,7,5,9,4,6,5,6,8,2,4,2,5,5,3,7,4,8,5,0,2,5,2,5,5,7,2,6,3,5,1,9,4,8,8,9,5,6,7,5,0,3,9,6,9,2,5,5,2,0,8,4,7,0,2,2,0,4,1,3,2,2,4,6,1,5,7,8,1,7,3,1,0,4,9,1,6,4,9,8,6,7,2,3,9,6,8,9,3,9,4,7,3,9,3,6,4,3,4,5,2,9,8,2,3,8,4,9,4,3,9,1,2,4,4,1,0,4,3,5,5,7,2,9,6,8,5,0,1,2,7,3,1,8,7,5,8,1,6,2,6,8,3,8,4,0,2,6,4,5,2,0,2,4,9,1,2,6,3,5,8,3,0,2,1,8,9,9,1,5,1,8,5,5,8,9,5,0,6,1,7,8,1,2,4,2,3,7,9,8,2],[0,3,8,5,5,1,5,3,3,6,7,5,9,4,6,5,6,8,2,4,2,5,5,3,7,4,8,5,0,2,5,2,5,5,7,2,6,3,5,1,9,4,8,8,9,5,6,7,5,0,3,9,6,9,2,5,5,2,0,8,4,7,0,2,2,0,4,1,3,2,2,4,6,1,5,7,8,1,7,3,1,0,4,9,1,6,4,9,8,6,7,2,3,9,6,8,9,3,9,4,7,3,9,3,6,4,3,4,5,2,9,8,2,3,8,4,9,4,3,9,1,2,4,4,1,0,4,3,5,5,7,2,9,6,8,5,0,1,2,7,3,1,8,7,5,8,1,6,2,6,8,3,8,4,0,2,6,4,5,2,0,2,4,9,1,2,6,3,5,8,3,0,2,1,8,9,9,1,5,1,8,5,5,8,9,5,0,6,1,7,8,1,2,4,2,3,7,9,8,2],[0,3,8,5,5,1,5,3,3,6,7,5,9,4,6,5,6,8,2,4,2,5,5,3,7,4,8,5,0,2,5,2,5,5,7,2,6,3,5,1,9,4,8,8,9,5,6,7,5,0,3,9,6,9,2,5,5,2,0,8,4,7,0,2,2,0,4,1,3,2,2,4,6,1,5,7,8,1,7,3,1,0,4,9,1,6,4,9,8,6,7,2,3,9,6,8,9,3,9,4,7,3,9,3,6,4,3,4,5,2,9,8,2,3,8,4,9,4,3,9,1,2,4,4,1,0,4,3,5,5,7,2,9,6,8,5,0,1,2,7,3,1,8,7,5,8,1,6,2,6,8,3,8,4,0,2,6,4,5,2,0,2,4,9,1,2,6,3,5,8,3,0,2,1,8,9,9,1,5,1,8,5,5,8,9,5,0,6,1,7,8,1,2,4,2,3,7,9,8,2],[0,3,8,5,5,1,5,3,3,6,7,5,9,4,6,5,6,8,2,4,2,5,5,3,7,4,8,5,0,2,5,2,5,5,7,2,6,3,5,1,9,4,8,8,9,5,6,7,5,0,3,9,6,9,2,5,5,2,0,8,4,7,0,2,2,0,4,1,3,2,2,4,6,1,5,7,8,1,7,3,1,0,4,9,1,6,4,9,8,6,7,2,3,9,6,8,9,3,9,4,7,3,9,3,6,4,3,4,5,2,9,8,2,3,8,4,9,4,3,9,1,2,4,4,1,0,4,3,5,5,7,2,9,6,8,5,0,1,2,7,3,1,8,7,5,8,1,6,2,6,8,3,8,4,0,2,6,4,5,2,0,2,4,9,1,2,6,3,5,8,3,0,2,1,8,9,9,1,5,1,8,5,5,8,9,5,0,6,1,7,8,1,2,4,2,3,7,9,8,2],[0,3,8,5,5,1,5,3,3,6,7,5,9,4,6,5,6,8,2,4,2,5,5,3,7,4,8,5,0,2,5,2,5,5,7,2,6,3,5,1,9,4,8,8,9,5,6,7,5,0,3,9,6,9,2,5,5,2,0,8,4,7,0,2,2,0,4,1,3,2,2,4,6,1,5,7,8,1,7,3,1,0,4,9,1,6,4,9,8,6,7,2,3,9,6,8,9,3,9,4,7,3,9,3,6,4,3,4,5,2,9,8,2,3,8,4,9,4,3,9,1,2,4,4,1,0,4,3,5,5,7,2,9,6,8,5,0,1,2,7,3,1,8,7,5,8,1,6,2,6,8,3,8,4,0,2,6,4,5,2,0,2,4,9,1,2,6,3,5,8,3,0,2,1,8,9,9,1,5,1,8,5,5,8,9,5,0,6,1,7,8,1,2,4,2,3,7,9,8,2]]
# takes 10minutes+
# print(SolutionMinimumPathSum_TLE().minPathSum(grid))
print(SolutionMinimumPathSum().minPathSum(grid))
print('SolutionReorderList')
l = ListNode.listGenerator([1,2,3,4])
ListNode.listPrint(SolutionReorderList().reorderList(l))
l = ListNode.listGenerator([7, 1, 6])
ListNode.listPrint(SolutionReorderList().reorderList(l))
l = ListNode.listGenerator([1,2,3,4,5])
ListNode.listPrint(SolutionReorderList().reorderList(l))
print('SolutionTriangle')
triangle =[
[2],
[3,4],
[6,5,7],
[4,1,8,3]
]
print(SolutionTriangle().minimumTotal(triangle))
print('SolutionCheckPalindrome')
print(SolutionCheckPalindrome().palindromeNumber(0))
print(SolutionCheckPalindrome().palindromeNumber(1))
print(SolutionCheckPalindrome().palindromeNumber(12321))
print(SolutionCheckPalindrome().palindromeNumber(2344432))
print('SolutionValidPalindrome')
print(SolutionValidPalindrome().isPalindrome(None))
print(SolutionValidPalindrome().isPalindrome(''))
print(SolutionValidPalindrome().isPalindrome('a'))
print(SolutionValidPalindrome().isPalindrome('(*^a@a)(*&^'))
print(SolutionValidPalindrome().isPalindrome(',;^$'))
print(SolutionValidPalindrome().isPalindrome("abbba"))
print(SolutionValidPalindrome().isPalindrome("A man, a plan, a canal: Panama"))
print(SolutionValidPalindrome().isPalindrome('1a2'))
print(SolutionValidPalindrome().isPalindrome('123a456a7'))
print(SolutionValidPalindrome().isPalindrome('abc'))
print(SolutionValidPalindrome().isPalindrome("snake"))
# Given binary tree A = {3,9,20,#,#,15,7}, B = {3,#,20,15,7}
# A) 3 B) 3
# / \ \
# 9 20 20
# / \ / \
# 15 7 15 7
# The binary tree A is a height-balanced binary tree, but B is not.
print('SolutionBalancedBinaryTree')
a = TreeNode.treeGenerator([3,9,20,15,7])
a[0].left = a[1]
a[0].right = a[2]
a[2].left = a[3]
a[2].right = a[4]
print(SolutionBalancedBinaryTree().isBalanced(a[0]))
a = TreeNode.treeGenerator([3,20,15,7])
a[0].right = a[1]
a[1].left = a[2]
a[1].right = a[3]
print(SolutionBalancedBinaryTree().isBalanced(a[0]))
# {1,2,3,4,5,6,7,8,9,#,11,12,13,14,15,16,#,#,17,#,#,18,19,20,21,22,23,24,25}
a = TreeNode.treeGenerator([0,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])
a[1].left = a[2]
a[1].right = a[3]
a[2].left = a[4]
a[2].right = a[5]
a[3].left = a[6]
a[3].right = a[7]
a[4].left = a[8]
a[4].right = a[9]
a[5].left = None
a[5].right = a[11]
a[6].left = a[12]
a[6].right = a[13]
a[7].left = a[14]
a[7].right = a[15]
a[8].left = a[16]
a[8].right = None
a[9].left = None
a[9].right = a[17]
a[12].left = a[18]
a[12].right = a[19]
a[13].left = a[20]
a[13].right = a[21]
a[14].left = a[22]
a[14].right = a[23]
a[15].left = a[24]
a[15].right = a[25]
# a[1].treePrint()
print(SolutionBalancedBinaryTree().isBalanced(a[1]))
print('SolutionSqrtX')
print(SolutionSqrtX().sqrt(0))
print(SolutionSqrtX().sqrt(3))
print(SolutionSqrtX().sqrt(4))
print(SolutionSqrtX().sqrt(5))
print(SolutionSqrtX().sqrt(10))
print(SolutionSqrtX().sqrt(1000))
print(SolutionSqrtX().sqrt(12345678))
print(SolutionSqrtX().sqrt(-1))
print(SolutionSqrtX().sqrt(-1000))
print(SolutionSqrtX().sqrt(-12345678))
print('SolutionRemoveNthNode')
l = ListNode.listGenerator([1,2,3,4,5])
l = SolutionRemoveNthNode().removeNthFromEnd(l, 2)
l.listPrint()
print('SolutionMergeIntervals')
ret = SolutionMergeIntervals().merge([
Interval(1,3),
Interval(5,7),
Interval(2,2),
])
Interval.print(ret)
ret = SolutionMergeIntervals().merge([
Interval(1,3),
Interval(5,7),
Interval(4,6),
])
Interval.print(ret)
ret = SolutionMergeIntervals().merge([
Interval(1,3),
Interval(2,6),
Interval(8,10),
Interval(15,18),
])
Interval.print(ret)
ret = SolutionMergeIntervals().merge([
Interval(2,3),
Interval(4,5),
Interval(6,7),
Interval(1,10),
])
Interval.print(ret)
ret = SolutionMergeIntervals().merge([
Interval(2,3),
Interval(2,2),
Interval(3,3),
Interval(1,3),
Interval(5,7),
Interval(2,2),
Interval(4,6),
])
Interval.print(ret)
print('SolutionRemoveDuplicatesfromSortedList')
l = ListNode.listGenerator([1,1,2])
l = SolutionRemoveDuplicatesfromSortedList().deleteDuplicates(l)
l.listPrint()
l = ListNode.listGenerator([1,1,2,3,3])
l = SolutionRemoveDuplicatesfromSortedList().deleteDuplicates(l)
l.listPrint()
print('SolutionRotateImage')
matrix=[
[1,2],
[3,4]
]
SolutionRotateImage().rotate(matrix)
print(matrix)
matrix=[
[1,2,3],
[4,5,6],
[7,8,9],
]
SolutionRotateImage().rotate(matrix)
print(matrix)
matrix=[
[1,2,3,4],
[5,6,7,8],
[9,10,11,12],
[13,14,15,16],
]
SolutionRotateImage().rotate(matrix)
print(matrix)
print('SolutionLevelOrderTraversal')
# 3
# / \
# 9 20
# / \
# 15 7
a = TreeNode.treeGenerator([3,9,20,15,7])
a[0].left = a[1]
a[0].right = a[2]
a[2].left = a[3]
a[2].right = a[4]
r = SolutionLevelOrderTraversal().levelOrder(a[0])
i = 0
while (i < len(r)):
j = 0
line = ''
while (j < len(r[i])):
line += (' %d' % r[i][j].val)
j += 1
print(line)
i += 1
print('SolutionLevelOrderTraversal_1')
r = SolutionLevelOrderTraversal_1().levelOrder([3,9,20,'#', '#', 15,7])
i = 0
while (i < len(r)):
j = 0
line = ''
while (j < len(r[i])):
line += (' %d' % r[i][j])
j += 1
print(line)
i += 1
print('SolutionLengthofLastWord')
print(SolutionLengthofLastWord().lengthOfLastWord("Hello World"))
print(SolutionLengthofLastWord().lengthOfLastWord(" Hello World "))
print(SolutionLengthofLastWord().lengthOfLastWord(" "))
print('SolutionSwapNodesinPairs')
l = ListNode.listGenerator([1,2,3,4])
print(SolutionSwapNodesinPairs().swapPairs(l))
l.listPrint()
l = ListNode.listGenerator([1,2,3])
print(SolutionSwapNodesinPairs().swapPairs(l))
l.listPrint()
l = ListNode.listGenerator([1,2,3,4,5])
print(SolutionSwapNodesinPairs().swapPairs(l))
l.listPrint()
###########################################