summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorache <ache@ache.one>2018-09-05 00:56:09 +0200
committerache <ache@ache.one>2018-09-05 00:56:09 +0200
commit2bae1659ba8eb742f737ccb31d9ad7f25f9599f7 (patch)
treed8ad2b75cefbcc70f9c31f154682a44299958f67
Init commit
-rw-r--r--p102/p102_triangles.txt1000
-rw-r--r--p102/p_102.go56
-rwxr-xr-xp107/p_107.go159
-rw-r--r--p112/p112.go52
-rw-r--r--p113/p113.go75
-rw-r--r--p125/p_125.go61
-rwxr-xr-xp145/p145bin0 -> 2011690 bytes
-rw-r--r--p145/p_145.go36
-rw-r--r--p59/p_59.go108
-rw-r--r--p71/p_71.cpp20
-rw-r--r--p71/p_71.go118
-rw-r--r--p82/p082_matrix.txt80
-rwxr-xr-xp82/p82bin0 -> 2196193 bytes
-rw-r--r--p82/p82_test.txt5
-rw-r--r--p82/p_82.go103
-rw-r--r--p83/p083_matrix.txt80
-rw-r--r--p83/p83.go244
-rw-r--r--p83/p83_test.csv5
-rw-r--r--p83/pqueue.go63
-rw-r--r--p83/test.go40
20 files changed, 2305 insertions, 0 deletions
diff --git a/p102/p102_triangles.txt b/p102/p102_triangles.txt
new file mode 100644
index 0000000..3f01a1a
--- /dev/null
+++ b/p102/p102_triangles.txt
@@ -0,0 +1,1000 @@
+-340,495,-153,-910,835,-947
+-175,41,-421,-714,574,-645
+-547,712,-352,579,951,-786
+419,-864,-83,650,-399,171
+-429,-89,-357,-930,296,-29
+-734,-702,823,-745,-684,-62
+-971,762,925,-776,-663,-157
+162,570,628,485,-807,-896
+641,91,-65,700,887,759
+215,-496,46,-931,422,-30
+-119,359,668,-609,-358,-494
+440,929,968,214,760,-857
+-700,785,838,29,-216,411
+-770,-458,-325,-53,-505,633
+-752,-805,349,776,-799,687
+323,5,561,-36,919,-560
+-907,358,264,320,204,274
+-728,-466,350,969,292,-345
+940,836,272,-533,748,185
+411,998,813,520,316,-949
+-152,326,658,-762,148,-651
+330,507,-9,-628,101,174
+551,-496,772,-541,-702,-45
+-164,-489,-90,322,631,-59
+673,366,-4,-143,-606,-704
+428,-609,801,-449,740,-269
+453,-924,-785,-346,-853,111
+-738,555,-181,467,-426,-20
+958,-692,784,-343,505,-569
+620,27,263,54,-439,-726
+804,87,998,859,871,-78
+-119,-453,-709,-292,-115,-56
+-626,138,-940,-476,-177,-274
+-11,160,142,588,446,158
+538,727,550,787,330,810
+420,-689,854,-546,337,516
+872,-998,-607,748,473,-192
+653,440,-516,-985,808,-857
+374,-158,331,-940,-338,-641
+137,-925,-179,771,734,-715
+-314,198,-115,29,-641,-39
+759,-574,-385,355,590,-603
+-189,-63,-168,204,289,305
+-182,-524,-715,-621,911,-255
+331,-816,-833,471,168,126
+-514,581,-855,-220,-731,-507
+129,169,576,651,-87,-458
+783,-444,-881,658,-266,298
+603,-430,-598,585,368,899
+43,-724,962,-376,851,409
+-610,-646,-883,-261,-482,-881
+-117,-237,978,641,101,-747
+579,125,-715,-712,208,534
+672,-214,-762,372,874,533
+-564,965,38,715,367,242
+500,951,-700,-981,-61,-178
+-382,-224,-959,903,-282,-60
+-355,295,426,-331,-591,655
+892,128,958,-271,-993,274
+-454,-619,302,138,-790,-874
+-642,601,-574,159,-290,-318
+266,-109,257,-686,54,975
+162,628,-478,840,264,-266
+466,-280,982,1,904,-810
+721,839,730,-807,777,981
+-129,-430,748,263,943,96
+434,-94,410,-990,249,-704
+237,42,122,-732,44,-51
+909,-116,-229,545,292,717
+824,-768,-807,-370,-262,30
+675,58,332,-890,-651,791
+363,825,-717,254,684,240
+405,-715,900,166,-589,422
+-476,686,-830,-319,634,-807
+633,837,-971,917,-764,207
+-116,-44,-193,-70,908,809
+-26,-252,998,408,70,-713
+-601,645,-462,842,-644,-591
+-160,653,274,113,-138,687
+369,-273,-181,925,-167,-693
+-338,135,480,-967,-13,-840
+-90,-270,-564,695,161,907
+607,-430,869,-713,461,-469
+919,-165,-776,522,606,-708
+-203,465,288,207,-339,-458
+-453,-534,-715,975,838,-677
+-973,310,-350,934,546,-805
+-835,385,708,-337,-594,-772
+-14,914,900,-495,-627,594
+833,-713,-213,578,-296,699
+-27,-748,484,455,915,291
+270,889,739,-57,442,-516
+119,811,-679,905,184,130
+-678,-469,925,553,612,482
+101,-571,-732,-842,644,588
+-71,-737,566,616,957,-663
+-634,-356,90,-207,936,622
+598,443,964,-895,-58,529
+847,-467,929,-742,91,10
+-633,829,-780,-408,222,-30
+-818,57,275,-38,-746,198
+-722,-825,-549,597,-391,99
+-570,908,430,873,-103,-360
+342,-681,512,434,542,-528
+297,850,479,609,543,-357
+9,784,212,548,56,859
+-152,560,-240,-969,-18,713
+140,-133,34,-635,250,-163
+-272,-22,-169,-662,989,-604
+471,-765,355,633,-742,-118
+-118,146,942,663,547,-376
+583,16,162,264,715,-33
+-230,-446,997,-838,561,555
+372,397,-729,-318,-276,649
+92,982,-970,-390,-922,922
+-981,713,-951,-337,-669,670
+-999,846,-831,-504,7,-128
+455,-954,-370,682,-510,45
+822,-960,-892,-385,-662,314
+-668,-686,-367,-246,530,-341
+-723,-720,-926,-836,-142,757
+-509,-134,384,-221,-873,-639
+-803,-52,-706,-669,373,-339
+933,578,631,-616,770,555
+741,-564,-33,-605,-576,275
+-715,445,-233,-730,734,-704
+120,-10,-266,-685,-490,-17
+-232,-326,-457,-946,-457,-116
+811,52,639,826,-200,147
+-329,279,293,612,943,955
+-721,-894,-393,-969,-642,453
+-688,-826,-352,-75,371,79
+-809,-979,407,497,858,-248
+-485,-232,-242,-582,-81,849
+141,-106,123,-152,806,-596
+-428,57,-992,811,-192,478
+864,393,122,858,255,-876
+-284,-780,240,457,354,-107
+956,605,-477,44,26,-678
+86,710,-533,-815,439,327
+-906,-626,-834,763,426,-48
+201,-150,-904,652,475,412
+-247,149,81,-199,-531,-148
+923,-76,-353,175,-121,-223
+427,-674,453,472,-410,585
+931,776,-33,85,-962,-865
+-655,-908,-902,208,869,792
+-316,-102,-45,-436,-222,885
+-309,768,-574,653,745,-975
+896,27,-226,993,332,198
+323,655,-89,260,240,-902
+501,-763,-424,793,813,616
+993,375,-938,-621,672,-70
+-880,-466,-283,770,-824,143
+63,-283,886,-142,879,-116
+-964,-50,-521,-42,-306,-161
+724,-22,866,-871,933,-383
+-344,135,282,966,-80,917
+-281,-189,420,810,362,-582
+-515,455,-588,814,162,332
+555,-436,-123,-210,869,-943
+589,577,232,286,-554,876
+-773,127,-58,-171,-452,125
+-428,575,906,-232,-10,-224
+437,276,-335,-348,605,878
+-964,511,-386,-407,168,-220
+307,513,912,-463,-423,-416
+-445,539,273,886,-18,760
+-396,-585,-670,414,47,364
+143,-506,754,906,-971,-203
+-544,472,-180,-541,869,-465
+-779,-15,-396,890,972,-220
+-430,-564,503,182,-119,456
+89,-10,-739,399,506,499
+954,162,-810,-973,127,870
+890,952,-225,158,828,237
+-868,952,349,465,574,750
+-915,369,-975,-596,-395,-134
+-135,-601,575,582,-667,640
+413,890,-560,-276,-555,-562
+-633,-269,561,-820,-624,499
+371,-92,-784,-593,864,-717
+-971,655,-439,367,754,-951
+172,-347,36,279,-247,-402
+633,-301,364,-349,-683,-387
+-780,-211,-713,-948,-648,543
+72,58,762,-465,-66,462
+78,502,781,-832,713,836
+-431,-64,-484,-392,208,-343
+-64,101,-29,-860,-329,844
+398,391,828,-858,700,395
+578,-896,-326,-604,314,180
+97,-321,-695,185,-357,852
+854,839,283,-375,951,-209
+194,96,-564,-847,162,524
+-354,532,494,621,580,560
+419,-678,-450,926,-5,-924
+-661,905,519,621,-143,394
+-573,268,296,-562,-291,-319
+-211,266,-196,158,564,-183
+18,-585,-398,777,-581,864
+790,-894,-745,-604,-418,70
+848,-339,150,773,11,851
+-954,-809,-53,-20,-648,-304
+658,-336,-658,-905,853,407
+-365,-844,350,-625,852,-358
+986,-315,-230,-159,21,180
+-15,599,45,-286,-941,847
+-613,-68,184,639,-987,550
+334,675,-56,-861,923,340
+-848,-596,960,231,-28,-34
+707,-811,-994,-356,-167,-171
+-470,-764,72,576,-600,-204
+379,189,-542,-576,585,800
+440,540,-445,-563,379,-334
+-155,64,514,-288,853,106
+-304,751,481,-520,-708,-694
+-709,132,594,126,-844,63
+723,471,421,-138,-962,892
+-440,-263,39,513,-672,-954
+775,809,-581,330,752,-107
+-376,-158,335,-708,-514,578
+-343,-769,456,-187,25,413
+548,-877,-172,300,-500,928
+938,-102,423,-488,-378,-969
+-36,564,-55,131,958,-800
+-322,511,-413,503,700,-847
+-966,547,-88,-17,-359,-67
+637,-341,-437,-181,527,-153
+-74,449,-28,3,485,189
+-997,658,-224,-948,702,-807
+-224,736,-896,127,-945,-850
+-395,-106,439,-553,-128,124
+-841,-445,-758,-572,-489,212
+633,-327,13,-512,952,771
+-940,-171,-6,-46,-923,-425
+-142,-442,-817,-998,843,-695
+340,847,-137,-920,-988,-658
+-653,217,-679,-257,651,-719
+-294,365,-41,342,74,-892
+690,-236,-541,494,408,-516
+180,-807,225,790,494,59
+707,605,-246,656,284,271
+65,294,152,824,442,-442
+-321,781,-540,341,316,415
+420,371,-2,545,995,248
+56,-191,-604,971,615,449
+-981,-31,510,592,-390,-362
+-317,-968,913,365,97,508
+832,63,-864,-510,86,202
+-483,456,-636,340,-310,676
+981,-847,751,-508,-962,-31
+-157,99,73,797,63,-172
+220,858,872,924,866,-381
+996,-169,805,321,-164,971
+896,11,-625,-973,-782,76
+578,-280,730,-729,307,-905
+-580,-749,719,-698,967,603
+-821,874,-103,-623,662,-491
+-763,117,661,-644,672,-607
+592,787,-798,-169,-298,690
+296,644,-526,-762,-447,665
+534,-818,852,-120,57,-379
+-986,-549,-329,294,954,258
+-133,352,-660,-77,904,-356
+748,343,215,500,317,-277
+311,7,910,-896,-809,795
+763,-602,-753,313,-352,917
+668,619,-474,-597,-650,650
+-297,563,-701,-987,486,-902
+-461,-740,-657,233,-482,-328
+-446,-250,-986,-458,-629,520
+542,-49,-327,-469,257,-947
+121,-575,-634,-143,-184,521
+30,504,455,-645,-229,-945
+-12,-295,377,764,771,125
+-686,-133,225,-25,-376,-143
+-6,-46,338,270,-405,-872
+-623,-37,582,467,963,898
+-804,869,-477,420,-475,-303
+94,41,-842,-193,-768,720
+-656,-918,415,645,-357,460
+-47,-486,-911,468,-608,-686
+-158,251,419,-394,-655,-895
+272,-695,979,508,-358,959
+-776,650,-918,-467,-690,-534
+-85,-309,-626,167,-366,-429
+-880,-732,-186,-924,970,-875
+517,645,-274,962,-804,544
+721,402,104,640,478,-499
+198,684,-134,-723,-452,-905
+-245,745,239,238,-826,441
+-217,206,-32,462,-981,-895
+-51,989,526,-173,560,-676
+-480,-659,-976,-580,-727,466
+-996,-90,-995,158,-239,642
+302,288,-194,-294,17,924
+-943,969,-326,114,-500,103
+-619,163,339,-880,230,421
+-344,-601,-795,557,565,-779
+590,345,-129,-202,-125,-58
+-777,-195,159,674,775,411
+-939,312,-665,810,121,855
+-971,254,712,815,452,581
+442,-9,327,-750,61,757
+-342,869,869,-160,390,-772
+620,601,565,-169,-69,-183
+-25,924,-817,964,321,-970
+-64,-6,-133,978,825,-379
+601,436,-24,98,-115,940
+-97,502,614,-574,922,513
+-125,262,-946,695,99,-220
+429,-721,719,-694,197,-558
+326,689,-70,-908,-673,338
+-468,-856,-902,-254,-358,305
+-358,530,542,355,-253,-47
+-438,-74,-362,963,988,788
+137,717,467,622,319,-380
+-86,310,-336,851,918,-288
+721,395,646,-53,255,-425
+255,175,912,84,-209,878
+-632,-485,-400,-357,991,-608
+235,-559,992,-297,857,-591
+87,-71,148,130,647,578
+-290,-584,-639,-788,-21,592
+386,984,625,-731,-993,-336
+-538,634,-209,-828,-150,-774
+-754,-387,607,-781,976,-199
+412,-798,-664,295,709,-537
+-412,932,-880,-232,561,852
+-656,-358,-198,-964,-433,-848
+-762,-668,-632,186,-673,-11
+-876,237,-282,-312,-83,682
+403,73,-57,-436,-622,781
+-587,873,798,976,-39,329
+-369,-622,553,-341,817,794
+-108,-616,920,-849,-679,96
+290,-974,234,239,-284,-321
+-22,394,-417,-419,264,58
+-473,-551,69,923,591,-228
+-956,662,-113,851,-581,-794
+-258,-681,413,-471,-637,-817
+-866,926,992,-653,-7,794
+556,-350,602,917,831,-610
+188,245,-906,361,492,174
+-720,384,-818,329,638,-666
+-246,846,890,-325,-59,-850
+-118,-509,620,-762,-256,15
+-787,-536,-452,-338,-399,813
+458,560,525,-311,-608,-419
+494,-811,-825,-127,-812,894
+-801,890,-629,-860,574,925
+-709,-193,-213,138,-410,-403
+861,91,708,-187,5,-222
+789,646,777,154,90,-49
+-267,-830,-114,531,591,-698
+-126,-82,881,-418,82,652
+-894,130,-726,-935,393,-815
+-142,563,654,638,-712,-597
+-759,60,-23,977,100,-765
+-305,595,-570,-809,482,762
+-161,-267,53,963,998,-529
+-300,-57,798,353,703,486
+-990,696,-764,699,-565,719
+-232,-205,566,571,977,369
+740,865,151,-817,-204,-293
+94,445,-768,229,537,-406
+861,620,37,-424,-36,656
+390,-369,952,733,-464,569
+-482,-604,959,554,-705,-626
+-396,-615,-991,108,272,-723
+143,780,535,142,-917,-147
+138,-629,-217,-908,905,115
+915,103,-852,64,-468,-642
+570,734,-785,-268,-326,-759
+738,531,-332,586,-779,24
+870,440,-217,473,-383,415
+-296,-333,-330,-142,-924,950
+118,120,-35,-245,-211,-652
+61,634,153,-243,838,789
+726,-582,210,105,983,537
+-313,-323,758,234,29,848
+-847,-172,-593,733,-56,617
+54,255,-512,156,-575,675
+-873,-956,-148,623,95,200
+700,-370,926,649,-978,157
+-639,-202,719,130,747,222
+194,-33,955,943,505,114
+-226,-790,28,-930,827,783
+-392,-74,-28,714,218,-612
+209,626,-888,-683,-912,495
+487,751,614,933,631,445
+-348,-34,-411,-106,835,321
+-689,872,-29,-800,312,-542
+-52,566,827,570,-862,-77
+471,992,309,-402,389,912
+24,520,-83,-51,555,503
+-265,-317,283,-970,-472,690
+606,526,137,71,-651,150
+217,-518,663,66,-605,-331
+-562,232,-76,-503,205,-323
+842,-521,546,285,625,-186
+997,-927,344,909,-546,974
+-677,419,81,121,-705,771
+719,-379,-944,-797,784,-155
+-378,286,-317,-797,-111,964
+-288,-573,784,80,-532,-646
+-77,407,-248,-797,769,-816
+-24,-637,287,-858,-927,-333
+-902,37,894,-823,141,684
+125,467,-177,-516,686,399
+-321,-542,641,-590,527,-224
+-400,-712,-876,-208,632,-543
+-676,-429,664,-242,-269,922
+-608,-273,-141,930,687,380
+786,-12,498,494,310,326
+-739,-617,606,-960,804,188
+384,-368,-243,-350,-459,31
+-550,397,320,-868,328,-279
+969,-179,853,864,-110,514
+910,793,302,-822,-285,488
+-605,-128,218,-283,-17,-227
+16,324,667,708,750,3
+485,-813,19,585,71,930
+-218,816,-687,-97,-732,-360
+-497,-151,376,-23,3,315
+-412,-989,-610,-813,372,964
+-878,-280,87,381,-311,69
+-609,-90,-731,-679,150,585
+889,27,-162,605,75,-770
+448,617,-988,0,-103,-504
+-800,-537,-69,627,608,-668
+534,686,-664,942,830,920
+-238,775,495,932,-793,497
+-343,958,-914,-514,-691,651
+568,-136,208,359,728,28
+286,912,-794,683,556,-102
+-638,-629,-484,445,-64,-497
+58,505,-801,-110,872,632
+-390,777,353,267,976,369
+-993,515,105,-133,358,-572
+964,996,355,-212,-667,38
+-725,-614,-35,365,132,-196
+237,-536,-416,-302,312,477
+-664,574,-210,224,48,-925
+869,-261,-256,-240,-3,-698
+712,385,32,-34,916,-315
+895,-409,-100,-346,728,-624
+-806,327,-450,889,-781,-939
+-586,-403,698,318,-939,899
+557,-57,-920,659,333,-51
+-441,232,-918,-205,246,1
+783,167,-797,-595,245,-736
+-36,-531,-486,-426,-813,-160
+777,-843,817,313,-228,-572
+735,866,-309,-564,-81,190
+-413,645,101,719,-719,218
+-83,164,767,796,-430,-459
+122,779,-15,-295,-96,-892
+462,379,70,548,834,-312
+-630,-534,124,187,-737,114
+-299,-604,318,-591,936,826
+-879,218,-642,-483,-318,-866
+-691,62,-658,761,-895,-854
+-822,493,687,569,910,-202
+-223,784,304,-5,541,925
+-914,541,737,-662,-662,-195
+-622,615,414,358,881,-878
+339,745,-268,-968,-280,-227
+-364,855,148,-709,-827,472
+-890,-532,-41,664,-612,577
+-702,-859,971,-722,-660,-920
+-539,-605,737,149,973,-802
+800,42,-448,-811,152,511
+-933,377,-110,-105,-374,-937
+-766,152,482,120,-308,390
+-568,775,-292,899,732,890
+-177,-317,-502,-259,328,-511
+612,-696,-574,-660,132,31
+-119,563,-805,-864,179,-672
+425,-627,183,-331,839,318
+-711,-976,-749,152,-916,261
+181,-63,497,211,262,406
+-537,700,-859,-765,-928,77
+892,832,231,-749,-82,613
+816,216,-642,-216,-669,-912
+-6,624,-937,-370,-344,268
+737,-710,-869,983,-324,-274
+565,952,-547,-158,374,-444
+51,-683,645,-845,515,636
+-953,-631,114,-377,-764,-144
+-8,470,-242,-399,-675,-730
+-540,689,-20,47,-607,590
+-329,-710,-779,942,-388,979
+123,829,674,122,203,563
+46,782,396,-33,386,610
+872,-846,-523,-122,-55,-190
+388,-994,-525,974,127,596
+781,-680,796,-34,-959,-62
+-749,173,200,-384,-745,-446
+379,618,136,-250,-224,970
+-58,240,-921,-760,-901,-626
+366,-185,565,-100,515,688
+489,999,-893,-263,-637,816
+838,-496,-316,-513,419,479
+107,676,-15,882,98,-397
+-999,941,-903,-424,670,-325
+171,-979,835,178,169,-984
+-609,-607,378,-681,184,402
+-316,903,-575,-800,224,983
+591,-18,-460,551,-167,918
+-756,405,-117,441,163,-320
+456,24,6,881,-836,-539
+-489,-585,915,651,-892,-382
+-177,-122,73,-711,-386,591
+181,724,530,686,-131,241
+737,288,886,216,233,33
+-548,-386,-749,-153,-85,-982
+-835,227,904,160,-99,25
+-9,-42,-162,728,840,-963
+217,-763,870,771,47,-846
+-595,808,-491,556,337,-900
+-134,281,-724,441,-134,708
+-789,-508,651,-962,661,315
+-839,-923,339,402,41,-487
+300,-790,48,703,-398,-811
+955,-51,462,-685,960,-717
+910,-880,592,-255,-51,-776
+-885,169,-793,368,-565,458
+-905,940,-492,-630,-535,-988
+245,797,763,869,-82,550
+-310,38,-933,-367,-650,824
+-95,32,-83,337,226,990
+-218,-975,-191,-208,-785,-293
+-672,-953,517,-901,-247,465
+681,-148,261,-857,544,-923
+640,341,446,-618,195,769
+384,398,-846,365,671,815
+578,576,-911,907,762,-859
+548,-428,144,-630,-759,-146
+710,-73,-700,983,-97,-889
+-46,898,-973,-362,-817,-717
+151,-81,-125,-900,-478,-154
+483,615,-537,-932,181,-68
+786,-223,518,25,-306,-12
+-422,268,-809,-683,635,468
+983,-734,-694,-608,-110,4
+-786,-196,749,-354,137,-8
+-181,36,668,-200,691,-973
+-629,-838,692,-736,437,-871
+-208,-536,-159,-596,8,197
+-3,370,-686,170,913,-376
+44,-998,-149,-993,-200,512
+-519,136,859,497,536,434
+77,-985,972,-340,-705,-837
+-381,947,250,360,344,322
+-26,131,699,750,707,384
+-914,655,299,193,406,955
+-883,-921,220,595,-546,794
+-599,577,-569,-404,-704,489
+-594,-963,-624,-460,880,-760
+-603,88,-99,681,55,-328
+976,472,139,-453,-531,-860
+192,-290,513,-89,666,432
+417,487,575,293,567,-668
+655,711,-162,449,-980,972
+-505,664,-685,-239,603,-592
+-625,-802,-67,996,384,-636
+365,-593,522,-666,-200,-431
+-868,708,560,-860,-630,-355
+-702,785,-637,-611,-597,960
+-137,-696,-93,-803,408,406
+891,-123,-26,-609,-610,518
+133,-832,-198,555,708,-110
+791,617,-69,487,696,315
+-900,694,-565,517,-269,-416
+914,135,-781,600,-71,-600
+991,-915,-422,-351,-837,313
+-840,-398,-302,21,590,146
+62,-558,-702,-384,-625,831
+-363,-426,-924,-496,792,-908
+73,361,-817,-466,400,922
+-626,-164,-626,860,-524,286
+255,26,-944,809,-606,986
+-457,-256,-103,50,-867,-871
+-223,803,196,480,612,136
+-820,-928,700,780,-977,721
+717,332,53,-933,-128,793
+-602,-648,562,593,890,702
+-469,-875,-527,911,-475,-222
+110,-281,-552,-536,-816,596
+-981,654,413,-981,-75,-95
+-754,-742,-515,894,-220,-344
+795,-52,156,408,-603,76
+474,-157,423,-499,-807,-791
+260,688,40,-52,702,-122
+-584,-517,-390,-881,302,-504
+61,797,665,708,14,668
+366,166,458,-614,564,-983
+72,539,-378,796,381,-824
+-485,201,-588,842,736,379
+-149,-894,-298,705,-303,-406
+660,-935,-580,521,93,633
+-382,-282,-375,-841,-828,171
+-567,743,-100,43,144,122
+-281,-786,-749,-551,296,304
+11,-426,-792,212,857,-175
+594,143,-699,289,315,137
+341,596,-390,107,-631,-804
+-751,-636,-424,-854,193,651
+-145,384,749,675,-786,517
+224,-865,-323,96,-916,258
+-309,403,-388,826,35,-270
+-942,709,222,158,-699,-103
+-589,842,-997,29,-195,-210
+264,426,566,145,-217,623
+217,965,507,-601,-453,507
+-206,307,-982,4,64,-292
+676,-49,-38,-701,550,883
+5,-850,-438,659,745,-773
+933,238,-574,-570,91,-33
+-866,121,-928,358,459,-843
+-568,-631,-352,-580,-349,189
+-737,849,-963,-486,-662,970
+135,334,-967,-71,-365,-792
+789,21,-227,51,990,-275
+240,412,-886,230,591,256
+-609,472,-853,-754,959,661
+401,521,521,314,929,982
+-499,784,-208,71,-302,296
+-557,-948,-553,-526,-864,793
+270,-626,828,44,37,14
+-412,224,617,-593,502,699
+41,-908,81,562,-849,163
+165,917,761,-197,331,-341
+-687,314,799,755,-969,648
+-164,25,578,439,-334,-576
+213,535,874,-177,-551,24
+-689,291,-795,-225,-496,-125
+465,461,558,-118,-568,-909
+567,660,-810,46,-485,878
+-147,606,685,-690,-774,984
+568,-886,-43,854,-738,616
+-800,386,-614,585,764,-226
+-518,23,-225,-732,-79,440
+-173,-291,-689,636,642,-447
+-598,-16,227,410,496,211
+-474,-930,-656,-321,-420,36
+-435,165,-819,555,540,144
+-969,149,828,568,394,648
+65,-848,257,720,-625,-851
+981,899,275,635,465,-877
+80,290,792,760,-191,-321
+-605,-858,594,33,706,593
+585,-472,318,-35,354,-927
+-365,664,803,581,-965,-814
+-427,-238,-480,146,-55,-606
+879,-193,250,-890,336,117
+-226,-322,-286,-765,-836,-218
+-913,564,-667,-698,937,283
+872,-901,810,-623,-52,-709
+473,171,717,38,-429,-644
+225,824,-219,-475,-180,234
+-530,-797,-948,238,851,-623
+85,975,-363,529,598,28
+-799,166,-804,210,-769,851
+-687,-158,885,736,-381,-461
+447,592,928,-514,-515,-661
+-399,-777,-493,80,-544,-78
+-884,631,171,-825,-333,551
+191,268,-577,676,137,-33
+212,-853,709,798,583,-56
+-908,-172,-540,-84,-135,-56
+303,311,406,-360,-240,811
+798,-708,824,59,234,-57
+491,693,-74,585,-85,877
+509,-65,-936,329,-51,722
+-122,858,-52,467,-77,-609
+850,760,547,-495,-953,-952
+-460,-541,890,910,286,724
+-914,843,-579,-983,-387,-460
+989,-171,-877,-326,-899,458
+846,175,-915,540,-1000,-982
+-852,-920,-306,496,530,-18
+338,-991,160,85,-455,-661
+-186,-311,-460,-563,-231,-414
+-932,-302,959,597,793,748
+-366,-402,-788,-279,514,53
+-940,-956,447,-956,211,-285
+564,806,-911,-914,934,754
+575,-858,-277,15,409,-714
+848,462,100,-381,135,242
+330,718,-24,-190,860,-78
+479,458,941,108,-866,-653
+212,980,962,-962,115,841
+-827,-474,-206,881,323,765
+506,-45,-30,-293,524,-133
+832,-173,547,-852,-561,-842
+-397,-661,-708,819,-545,-228
+521,51,-489,852,36,-258
+227,-164,189,465,-987,-882
+-73,-997,641,-995,449,-615
+151,-995,-638,415,257,-400
+-663,-297,-748,537,-734,198
+-585,-401,-81,-782,-80,-105
+99,-21,238,-365,-704,-368
+45,416,849,-211,-371,-1
+-404,-443,795,-406,36,-933
+272,-363,981,-491,-380,77
+713,-342,-366,-849,643,911
+-748,671,-537,813,961,-200
+-194,-909,703,-662,-601,188
+281,500,724,286,267,197
+-832,847,-595,820,-316,637
+520,521,-54,261,923,-10
+4,-808,-682,-258,441,-695
+-793,-107,-969,905,798,446
+-108,-739,-590,69,-855,-365
+380,-623,-930,817,468,713
+759,-849,-236,433,-723,-931
+95,-320,-686,124,-69,-329
+-655,518,-210,-523,284,-866
+144,303,639,70,-171,269
+173,-333,947,-304,55,40
+274,878,-482,-888,-835,375
+-982,-854,-36,-218,-114,-230
+905,-979,488,-485,-479,114
+877,-157,553,-530,-47,-321
+350,664,-881,442,-220,-284
+434,-423,-365,878,-726,584
+535,909,-517,-447,-660,-141
+-966,191,50,353,182,-642
+-785,-634,123,-907,-162,511
+146,-850,-214,814,-704,25
+692,1,521,492,-637,274
+-662,-372,-313,597,983,-647
+-962,-526,68,-549,-819,231
+740,-890,-318,797,-666,948
+-190,-12,-468,-455,948,284
+16,478,-506,-888,628,-154
+272,630,-976,308,433,3
+-169,-391,-132,189,302,-388
+109,-784,474,-167,-265,-31
+-177,-532,283,464,421,-73
+650,635,592,-138,1,-387
+-932,703,-827,-492,-355,686
+586,-311,340,-618,645,-434
+-951,736,647,-127,-303,590
+188,444,903,718,-931,500
+-872,-642,-296,-571,337,241
+23,65,152,125,880,470
+512,823,-42,217,823,-263
+180,-831,-380,886,607,762
+722,443,-149,-216,-115,759
+-19,660,-36,901,923,231
+562,-322,-626,-968,194,-825
+204,-920,938,784,362,150
+-410,-266,-715,559,-672,124
+-198,446,-140,454,-461,-447
+83,-346,830,-493,-759,-382
+-881,601,581,234,-134,-925
+-494,914,-42,899,235,629
+-390,50,956,437,774,-700
+-514,514,44,-512,-576,-313
+63,-688,808,-534,-570,-399
+-726,572,-896,102,-294,-28
+-688,757,401,406,955,-511
+-283,423,-485,480,-767,908
+-541,952,-594,116,-854,451
+-273,-796,236,625,-626,257
+-407,-493,373,826,-309,297
+-750,955,-476,641,-809,713
+8,415,695,226,-111,2
+733,209,152,-920,401,995
+921,-103,-919,66,871,-947
+-907,89,-869,-214,851,-559
+-307,748,524,-755,314,-711
+188,897,-72,-763,482,103
+545,-821,-232,-596,-334,-754
+-217,-788,-820,388,-200,-662
+779,160,-723,-975,-142,-998
+-978,-519,-78,-981,842,904
+-504,-736,-295,21,-472,-482
+391,115,-705,574,652,-446
+813,-988,865,830,-263,487
+194,80,774,-493,-761,-872
+-415,-284,-803,7,-810,670
+-484,-4,881,-872,55,-852
+-379,822,-266,324,-48,748
+-304,-278,406,-60,959,-89
+404,756,577,-643,-332,658
+291,460,125,491,-312,83
+311,-734,-141,582,282,-557
+-450,-661,-981,710,-177,794
+328,264,-787,971,-743,-407
+-622,518,993,-241,-738,229
+273,-826,-254,-917,-710,-111
+809,770,96,368,-818,725
+-488,773,502,-342,534,745
+-28,-414,236,-315,-484,363
+179,-466,-566,713,-683,56
+560,-240,-597,619,916,-940
+893,473,872,-868,-642,-461
+799,489,383,-321,-776,-833
+980,490,-508,764,-512,-426
+917,961,-16,-675,440,559
+-812,212,784,-987,-132,554
+-886,454,747,806,190,231
+910,341,21,-66,708,725
+29,929,-831,-494,-303,389
+-103,492,-271,-174,-515,529
+-292,119,419,788,247,-951
+483,543,-347,-673,664,-549
+-926,-871,-437,337,162,-877
+299,472,-771,5,-88,-643
+-103,525,-725,-998,264,22
+-505,708,550,-545,823,347
+-738,931,59,147,-156,-259
+456,968,-162,889,132,-911
+535,120,968,-517,-864,-541
+24,-395,-593,-766,-565,-332
+834,611,825,-576,280,629
+211,-548,140,-278,-592,929
+-999,-240,-63,-78,793,573
+-573,160,450,987,529,322
+63,353,315,-187,-461,577
+189,-950,-247,656,289,241
+209,-297,397,664,-805,484
+-655,452,435,-556,917,874
+253,-756,262,-888,-778,-214
+793,-451,323,-251,-401,-458
+-396,619,-651,-287,-668,-781
+698,720,-349,742,-807,546
+738,280,680,279,-540,858
+-789,387,530,-36,-551,-491
+162,579,-427,-272,228,710
+689,356,917,-580,729,217
+-115,-638,866,424,-82,-194
+411,-338,-917,172,227,-29
+-612,63,630,-976,-64,-204
+-200,911,583,-571,682,-579
+91,298,396,-183,788,-955
+141,-873,-277,149,-396,916
+321,958,-136,573,541,-777
+797,-909,-469,-877,988,-653
+784,-198,129,883,-203,399
+-68,-810,223,-423,-467,-512
+531,-445,-603,-997,-841,641
+-274,-242,174,261,-636,-158
+-574,494,-796,-798,-798,99
+95,-82,-613,-954,-753,986
+-883,-448,-864,-401,938,-392
+913,930,-542,-988,310,410
+506,-99,43,512,790,-222
+724,31,49,-950,260,-134
+-287,-947,-234,-700,56,588
+-33,782,-144,948,105,-791
+548,-546,-652,-293,881,-520
+691,-91,76,991,-631,742
+-520,-429,-244,-296,724,-48
+778,646,377,50,-188,56
+-895,-507,-898,-165,-674,652
+654,584,-634,177,-349,-620
+114,-980,355,62,182,975
+516,9,-442,-298,274,-579
+-238,262,-431,-896,506,-850
+47,748,846,821,-537,-293
+839,726,593,285,-297,840
+634,-486,468,-304,-887,-567
+-864,914,296,-124,335,233
+88,-253,-523,-956,-554,803
+-587,417,281,-62,-409,-363
+-136,-39,-292,-768,-264,876
+-127,506,-891,-331,-744,-430
+778,584,-750,-129,-479,-94
+-876,-771,-987,-757,180,-641
+-777,-694,411,-87,329,190
+-347,-999,-882,158,-754,232
+-105,918,188,237,-110,-591
+-209,703,-838,77,838,909
+-995,-339,-762,750,860,472
+185,271,-289,173,811,-300
+2,65,-656,-22,36,-139
+765,-210,883,974,961,-905
+-212,295,-615,-840,77,474
+211,-910,-440,703,-11,859
+-559,-4,-196,841,-277,969
+-73,-159,-887,126,978,-371
+-569,633,-423,-33,512,-393
+503,143,-383,-109,-649,-998
+-663,339,-317,-523,-2,596
+690,-380,570,378,-652,132
+72,-744,-930,399,-525,935
+865,-983,115,37,995,826
+594,-621,-872,443,188,-241
+-1000,291,754,234,-435,-869
+-868,901,654,-907,59,181
+-868,-793,-431,596,-446,-564
+900,-944,-680,-796,902,-366
+331,430,943,853,-851,-942
+315,-538,-354,-909,139,721
+170,-884,-225,-818,-808,-657
+-279,-34,-533,-871,-972,552
+691,-986,-800,-950,654,-747
+603,988,899,841,-630,591
+876,-949,809,562,602,-536
+-693,363,-189,495,738,-1000
+-383,431,-633,297,665,959
+-740,686,-207,-803,188,-520
+-820,226,31,-339,10,121
+-312,-844,624,-516,483,621
+-822,-529,69,-278,800,328
+834,-82,-759,420,811,-264
+-960,-240,-921,561,173,46
+-324,909,-790,-814,-2,-785
+976,334,-290,-891,704,-581
+150,-798,689,-823,237,-639
+-551,-320,876,-502,-622,-628
+-136,845,904,595,-702,-261
+-857,-377,-522,-101,-943,-805
+-682,-787,-888,-459,-752,-985
+-571,-81,623,-133,447,643
+-375,-158,72,-387,-324,-696
+-660,-650,340,188,569,526
+727,-218,16,-7,-595,-988
+-966,-684,802,-783,-272,-194
+115,-566,-888,47,712,180
+-237,-69,45,-272,981,-812
+48,897,439,417,50,325
+348,616,180,254,104,-784
+-730,811,-548,612,-736,790
+138,-810,123,930,65,865
+-768,-299,-49,-895,-692,-418
+487,-531,802,-159,-12,634
+808,-179,552,-73,470,717
+720,-644,886,-141,625,144
+-485,-505,-347,-244,-916,66
+600,-565,995,-5,324,227
+-771,-35,904,-482,753,-303
+-701,65,426,-763,-504,-479
+409,733,-823,475,64,718
+865,975,368,893,-413,-433
+812,-597,-970,819,813,624
+193,-642,-381,-560,545,398
+711,28,-316,771,717,-865
+-509,462,809,-136,786,635
+618,-49,484,169,635,547
+-747,685,-882,-496,-332,82
+-501,-851,870,563,290,570
+-279,-829,-509,397,457,816
+-508,80,850,-188,483,-326
+860,-100,360,119,-205,787
+-870,21,-39,-827,-185,932
+826,284,-136,-866,-330,-97
+-944,-82,745,899,-97,365
+929,262,564,632,-115,632
+244,-276,713,330,-897,-214
+-890,-109,664,876,-974,-907
+716,249,816,489,723,141
+-96,-560,-272,45,-70,645
+762,-503,414,-828,-254,-646
+909,-13,903,-422,-344,-10
+658,-486,743,545,50,674
+-241,507,-367,18,-48,-241
+886,-268,884,-762,120,-486
+-412,-528,879,-647,223,-393
+851,810,234,937,-726,797
+-999,942,839,-134,-996,-189
+100,979,-527,-521,378,800
+544,-844,-832,-530,-77,-641
+43,889,31,442,-934,-503
+-330,-370,-309,-439,173,547
+169,945,62,-753,-542,-597
+208,751,-372,-647,-520,70
+765,-840,907,-257,379,918
+334,-135,-689,730,-427,618
+137,-508,66,-695,78,169
+-962,-123,400,-417,151,969
+328,689,666,427,-555,-642
+-907,343,605,-341,-647,582
+-667,-363,-571,818,-265,-399
+525,-938,904,898,725,692
+-176,-802,-858,-9,780,275
+580,170,-740,287,691,-97
+365,557,-375,361,-288,859
+193,737,842,-808,520,282
+-871,65,-799,836,179,-720
+958,-144,744,-789,797,-48
+122,582,662,912,68,757
+595,241,-801,513,388,186
+-103,-677,-259,-731,-281,-857
+921,319,-696,683,-88,-997
+775,200,78,858,648,768
+316,821,-763,68,-290,-741
+564,664,691,504,760,787
+694,-119,973,-385,309,-760
+777,-947,-57,990,74,19
+971,626,-496,-781,-602,-239
+-651,433,11,-339,939,294
+-965,-728,560,569,-708,-247
diff --git a/p102/p_102.go b/p102/p_102.go
new file mode 100644
index 0000000..d7e3f57
--- /dev/null
+++ b/p102/p_102.go
@@ -0,0 +1,56 @@
+package main
+
+import (
+ "fmt"
+ "bufio"
+ "os"
+ "log"
+)
+
+type Point struct {
+ x,y int
+}
+
+type Triangle struct {
+ a,b,c Point
+}
+
+func readTriangle( str string ) (ret Triangle) {
+ fmt.Sscanf(str, "%d,%d,%d,%d,%d,%d", &ret.a.x, &ret.a.y, &ret.b.x, &ret.b.y, &ret.c.x, &ret.c.y)
+ return ret
+}
+func det( a, b Point) int {
+ return a.x*b.y - a.y*b.x;
+}
+
+func signe( c, a Point) bool {
+ return det(Point{ c.x - a.x, c.y - a.y}, Point{ -a.x, -a.y }) < 0
+}
+
+
+func main() {
+ file, err := os.Open("p102_triangles.txt")
+ cmp := 0
+
+ if err != nil {
+ log.Fatal(err)
+ }
+
+ defer file.Close()
+
+ scan := bufio.NewScanner(file)
+ scan.Split(bufio.ScanLines)
+
+ for scan.Scan() {
+ trian := readTriangle(scan.Text())
+
+ sign := signe( trian.c, trian.a )
+
+ if signe( trian.a, trian.b) == sign && signe( trian.b, trian.c ) == sign {
+ cmp++
+ }
+ }
+
+ fmt.Print(cmp);
+}
+
diff --git a/p107/p_107.go b/p107/p_107.go
new file mode 100755
index 0000000..de90fce
--- /dev/null
+++ b/p107/p_107.go
@@ -0,0 +1,159 @@
+package main
+
+import (
+ "encoding/csv"
+ "fmt"
+ "io"
+ "log"
+ "sort"
+ "strconv"
+ "strings"
+)
+
+type Edge struct {
+ src, dst, value int
+}
+
+func minMax(a, b int) (int,int) {
+ if a < b {
+ return a,b
+ }
+ return b,a
+}
+
+var in string = `-,-,-,427,668,495,377,678,-,177,-,-,870,-,869,624,300,609,131,-,251,-,-,-,856,221,514,-,591,762,182,56,-,884,412,273,636,-,-,774
+-,-,262,-,-,508,472,799,-,956,578,363,940,143,-,162,122,910,-,729,802,941,922,573,531,539,667,607,-,920,-,-,315,649,937,-,185,102,636,289
+-,262,-,-,926,-,958,158,647,47,621,264,81,-,402,813,649,386,252,391,264,637,349,-,-,-,108,-,727,225,578,699,-,898,294,-,575,168,432,833
+427,-,-,-,366,-,-,635,-,32,962,468,893,854,718,427,448,916,258,-,760,909,529,311,404,-,-,588,680,875,-,615,-,409,758,221,-,-,76,257
+668,-,926,366,-,-,-,250,268,-,503,944,-,677,-,727,793,457,981,191,-,-,-,351,969,925,987,328,282,589,-,873,477,-,-,19,450,-,-,-
+495,508,-,-,-,-,-,765,711,819,305,302,926,-,-,582,-,861,-,683,293,-,-,66,-,27,-,-,290,-,786,-,554,817,33,-,54,506,386,381
+377,472,958,-,-,-,-,-,-,120,42,-,134,219,457,639,538,374,-,-,-,966,-,-,-,-,-,449,120,797,358,232,550,-,305,997,662,744,686,239
+678,799,158,635,250,765,-,-,-,35,-,106,385,652,160,-,890,812,605,953,-,-,-,79,-,712,613,312,452,-,978,900,-,901,-,-,225,533,770,722
+-,-,647,-,268,711,-,-,-,283,-,172,-,663,236,36,403,286,986,-,-,810,761,574,53,793,-,-,777,330,936,883,286,-,174,-,-,-,828,711
+177,956,47,32,-,819,120,35,283,-,50,-,565,36,767,684,344,489,565,-,-,103,810,463,733,665,494,644,863,25,385,-,342,470,-,-,-,730,582,468
+-,578,621,962,503,305,42,-,-,50,-,155,519,-,-,256,990,801,154,53,474,650,402,-,-,-,966,-,-,406,989,772,932,7,-,823,391,-,-,933
+-,363,264,468,944,302,-,106,172,-,155,-,-,-,380,438,-,41,266,-,-,104,867,609,-,270,861,-,-,165,-,675,250,686,995,366,191,-,433,-
+870,940,81,893,-,926,134,385,-,565,519,-,-,313,851,-,-,-,248,220,-,826,359,829,-,234,198,145,409,68,359,-,814,218,186,-,-,929,203,-
+-,143,-,854,677,-,219,652,663,36,-,-,313,-,132,-,433,598,-,-,168,870,-,-,-,128,437,-,383,364,966,227,-,-,807,993,-,-,526,17
+869,-,402,718,-,-,457,160,236,767,-,380,851,132,-,-,596,903,613,730,-,261,-,142,379,885,89,-,848,258,112,-,900,-,-,818,639,268,600,-
+624,162,813,427,727,582,639,-,36,684,256,438,-,-,-,-,539,379,664,561,542,-,999,585,-,-,321,398,-,-,950,68,193,-,697,-,390,588,848,-
+300,122,649,448,793,-,538,890,403,344,990,-,-,433,596,539,-,-,73,-,318,-,-,500,-,968,-,291,-,-,765,196,504,757,-,542,-,395,227,148
+609,910,386,916,457,861,374,812,286,489,801,41,-,598,903,379,-,-,-,946,136,399,-,941,707,156,757,258,251,-,807,-,-,-,461,501,-,-,616,-
+131,-,252,258,981,-,-,605,986,565,154,266,248,-,613,664,73,-,-,686,-,-,575,627,817,282,-,698,398,222,-,649,-,-,-,-,-,654,-,-
+-,729,391,-,191,683,-,953,-,-,53,-,220,-,730,561,-,946,686,-,-,389,729,553,304,703,455,857,260,-,991,182,351,477,867,-,-,889,217,853
+251,802,264,760,-,293,-,-,-,-,474,-,-,168,-,542,318,136,-,-,-,-,392,-,-,-,267,407,27,651,80,927,-,974,977,-,-,457,117,-
+-,941,637,909,-,-,966,-,810,103,650,104,826,870,261,-,-,399,-,389,-,-,-,202,-,-,-,-,867,140,403,962,785,-,511,-,1,-,707,-
+-,922,349,529,-,-,-,-,761,810,402,867,359,-,-,999,-,-,575,729,392,-,-,388,939,-,959,-,83,463,361,-,-,512,931,-,224,690,369,-
+-,573,-,311,351,66,-,79,574,463,-,609,829,-,142,585,500,941,627,553,-,202,388,-,164,829,-,620,523,639,936,-,-,490,-,695,-,505,109,-
+856,531,-,404,969,-,-,-,53,733,-,-,-,-,379,-,-,707,817,304,-,-,939,164,-,-,616,716,728,-,889,349,-,963,150,447,-,292,586,264
+221,539,-,-,925,27,-,712,793,665,-,270,234,128,885,-,968,156,282,703,-,-,-,829,-,-,-,822,-,-,-,736,576,-,697,946,443,-,205,194
+514,667,108,-,987,-,-,613,-,494,966,861,198,437,89,321,-,757,-,455,267,-,959,-,616,-,-,-,349,156,339,-,102,790,359,-,439,938,809,260
+-,607,-,588,328,-,449,312,-,644,-,-,145,-,-,398,291,258,698,857,407,-,-,620,716,822,-,-,293,486,943,-,779,-,6,880,116,775,-,947
+591,-,727,680,282,290,120,452,777,863,-,-,409,383,848,-,-,251,398,260,27,867,83,523,728,-,349,293,-,212,684,505,341,384,9,992,507,48,-,-
+762,920,225,875,589,-,797,-,330,25,406,165,68,364,258,-,-,-,222,-,651,140,463,639,-,-,156,486,212,-,-,349,723,-,-,186,-,36,240,752
+182,-,578,-,-,786,358,978,936,385,989,-,359,966,112,950,765,807,-,991,80,403,361,936,889,-,339,943,684,-,-,965,302,676,725,-,327,134,-,147
+56,-,699,615,873,-,232,900,883,-,772,675,-,227,-,68,196,-,649,182,927,962,-,-,349,736,-,-,505,349,965,-,474,178,833,-,-,555,853,-
+-,315,-,-,477,554,550,-,286,342,932,250,814,-,900,193,504,-,-,351,-,785,-,-,-,576,102,779,341,723,302,474,-,689,-,-,-,451,-,-
+884,649,898,409,-,817,-,901,-,470,7,686,218,-,-,-,757,-,-,477,974,-,512,490,963,-,790,-,384,-,676,178,689,-,245,596,445,-,-,343
+412,937,294,758,-,33,305,-,174,-,-,995,186,807,-,697,-,461,-,867,977,511,931,-,150,697,359,6,9,-,725,833,-,245,-,949,-,270,-,112
+273,-,-,221,19,-,997,-,-,-,823,366,-,993,818,-,542,501,-,-,-,-,-,695,447,946,-,880,992,186,-,-,-,596,949,-,91,-,768,273
+636,185,575,-,450,54,662,225,-,-,391,191,-,-,639,390,-,-,-,-,-,1,224,-,-,443,439,116,507,-,327,-,-,445,-,91,-,248,-,344
+-,102,168,-,-,506,744,533,-,730,-,-,929,-,268,588,395,-,654,889,457,-,690,505,292,-,938,775,48,36,134,555,451,-,270,-,248,-,371,680
+-,636,432,76,-,386,686,770,828,582,-,433,203,526,600,848,227,616,-,217,117,707,369,109,586,205,809,-,-,240,-,853,-,-,-,768,-,371,-,540
+774,289,833,257,-,381,239,722,711,468,933,-,-,17,-,-,148,-,-,853,-,-,-,-,264,194,260,947,-,752,147,-,-,343,112,273,344,680,540,-`
+
+
+/*
+var in string = `-,16,12,21,-,-,-
+16,-,-,17,20,-,-
+12,-,-,28,-,31,-
+21,17,28,-,18,19,23
+-,20,-,18,-,-,11
+-,-,31,19,-,-,27
+-,-,-,23,11,27,-`
+
+
+
+// Should be 243 - 93
+*/
+
+var charsetEdge string = " ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+=-_^'%#$!<>{}()[]@"
+
+func printEdge( e Edge ) {
+ fmt.Printf("From %c to %c by %d\n", charsetEdge[e.src], charsetEdge[e.dst], e.value)
+}
+
+var isInTheWeb [41]int
+func main() {
+ edges := []Edge{}
+
+ r := csv.NewReader(strings.NewReader(in))
+
+ x, y := 0, 0
+
+ for {
+ record, err := r.Read()
+
+ if err == io.EOF {
+ break
+ }
+
+ if err != nil {
+ log.Fatal(err)
+ }
+
+ x++
+ y = 1
+ for _, val := range record[0:x] {
+ if v, err := strconv.Atoi(val); err == nil {
+ edges = append(edges, Edge{y, x, v})
+ }
+ y++
+ }
+ }
+
+ total := 0
+ maxValue := 0
+
+ sort.Slice(edges, func(i, j int) bool {
+ return edges[i].value < edges[j].value
+ })
+
+ for _, edge := range edges {
+ maxValue += edge.value
+
+
+ if isInTheWeb[edge.src] != isInTheWeb[edge.dst] {
+
+ if isInTheWeb[edge.src] == 0 {
+ isInTheWeb[edge.src] = isInTheWeb[edge.dst]
+ } else if isInTheWeb[edge.dst] == 0 {
+ isInTheWeb[edge.dst] = isInTheWeb[edge.src]
+ }else {
+ newVal, oldVal := minMax(isInTheWeb[edge.dst], isInTheWeb[edge.src])
+ for i := range isInTheWeb {
+ if isInTheWeb[i] == oldVal {
+ isInTheWeb[i] = newVal
+ }
+ }
+ }
+
+ printEdge( edge )
+ fmt.Println( isInTheWeb )
+
+ total += edge.value
+ } else if isInTheWeb[edge.src] == 0 && isInTheWeb[edge.dst] == 0 {
+ isInTheWeb[edge.src],_ = minMax(edge.src, edge.dst)
+ isInTheWeb[edge.dst],_ = minMax(edge.src, edge.dst)
+
+ printEdge( edge )
+ fmt.Println( isInTheWeb )
+
+ total += edge.value
+ }
+ }
+
+ fmt.Println("Max is : ", maxValue)
+ fmt.Println("Min is : ", total)
+ fmt.Println("Diff is : ", maxValue-total)
+}
diff --git a/p112/p112.go b/p112/p112.go
new file mode 100644
index 0000000..91e5961
--- /dev/null
+++ b/p112/p112.go
@@ -0,0 +1,52 @@
+package main
+
+import "fmt"
+
+const (
+ LIMITE = 0.99
+)
+
+func isBouncy( a int ) bool {
+ if a < 101 {
+ return false;
+ }
+ c, d := 0, 0
+
+ for c == d && a != 0 {
+ d = a % 10
+ a /= 10
+ c = a % 10
+ }
+ if c == d {
+ return false;
+ }
+ if c < d {
+ for c <= d && a != 0 {
+ d = a % 10
+ a /= 10
+ c = a % 10
+ }
+ } else {
+ for c >= d && a != 0 {
+ d = a % 10
+ a /= 10
+ c = a % 10
+ }
+ }
+ return a != 0
+}
+
+func main() {
+ num := 0.
+ tot := 10.
+ i := 0
+
+ for i = 11 ; num/tot < LIMITE ; i++ {
+ if isBouncy(i) {
+ num+=1.
+ }
+ tot+=1.
+ }
+
+ fmt.Println(i-1);
+}
diff --git a/p113/p113.go b/p113/p113.go
new file mode 100644
index 0000000..fc61465
--- /dev/null
+++ b/p113/p113.go
@@ -0,0 +1,75 @@
+package main
+
+import "fmt"
+
+const (
+ LIMITE = 0.99
+)
+
+func isBouncy( a int ) int {
+ if a < 101 {
+ return 0;
+ }
+ c, d := 0, 0
+
+ inc := 0
+
+ for c == d && a != 0 {
+ d = a % 10
+ a /= 10
+ c = a % 10
+ }
+ if c == d {
+ return 2;
+ }
+ if c < d {
+ inc = 1
+ for c <= d && a != 0 {
+ d = a % 10
+ a /= 10
+ c = a % 10
+ }
+ } else {
+ inc = -1
+ for c >= d && a != 0 {
+ d = a % 10
+ a /= 10
+ c = a % 10
+ }
+ }
+ if( a == 0 ) {
+ return inc
+ } else {
+ return 0
+ }
+}
+
+func main() {
+ tot := 0
+ i := 0
+
+ inc := 0
+ dec := 0
+ bon := 0
+
+
+ for i = 0 ; i < 10000 ; i++ {
+ if isBouncy(i) < 0 {
+ dec++
+ } else if isBouncy(i) == 0 {
+ bon++
+ } else if isBouncy(i) == 1 {
+ inc++
+ } else {
+ dec++
+ inc++
+ }
+ tot+=1.
+ }
+
+ fmt.Println(dec);
+ fmt.Println(inc);
+ fmt.Println(bon);
+ fmt.Println(tot-bon);
+ fmt.Println(tot);
+}
diff --git a/p125/p_125.go b/p125/p_125.go
new file mode 100644
index 0000000..31baaca
--- /dev/null
+++ b/p125/p_125.go
@@ -0,0 +1,61 @@
+package main
+import "fmt"
+
+
+// 10^8 is the maximum ... So let's use uint64 ...
+
+const LIMIT_MAX = uint64(100000000)
+
+func reverse( in uint64 ) (out uint64) {
+
+ for ; in != 0 ; in /= 10 {
+ out *= 10
+ out += in % 10
+ }
+
+ return
+}
+func isPalindromic( in uint64 ) bool {
+ return in == reverse(in)
+}
+
+func showPile( slice []uint64 ) {
+ for i := 0 ; i < len(slice) ; i++ {
+ fmt.Printf("[%d]", slice[i])
+ }
+ fmt.Println("")
+}
+
+func main() {
+
+ pile := []uint64{5};
+ mem := [LIMIT_MAX]bool{};
+
+ for cmp := uint64(3) ; ; cmp++ {
+
+ tmp := []uint64{};
+
+ for _,v := range pile {
+ mem[v] = true
+ if v+cmp*cmp < LIMIT_MAX {
+ tmp = append(tmp, v+cmp*cmp);
+ }
+ }
+
+ pile = append(tmp, cmp*cmp+(cmp-1)*(cmp-1))
+
+ if len(tmp) == 0 {
+ break
+ }
+
+ }
+
+ cmp := 0
+ for i,v := range mem {
+ if v && isPalindromic(uint64(i)) {
+ cmp+=i
+ }
+ }
+
+ fmt.Println(cmp)
+}
diff --git a/p145/p145 b/p145/p145
new file mode 100755
index 0000000..9c01167
--- /dev/null
+++ b/p145/p145
Binary files differ
diff --git a/p145/p_145.go b/p145/p_145.go
new file mode 100644
index 0000000..6fc832c
--- /dev/null
+++ b/p145/p_145.go
@@ -0,0 +1,36 @@
+package main
+import "fmt"
+
+
+// 10^9 is the maximum ... So let's use uint64 ...
+// It solves it in 16s ... Yeap brute force.
+
+func reverse( in uint64 ) (out uint64) {
+
+ for ; in != 0 ; in /= 10 {
+ out *= 10
+ out += in % 10
+ }
+
+ return
+}
+func hasOnlyOdd( in uint64 ) bool {
+
+ for ; in != 0 ; in /= 10 {
+ if (in%10)&1 == 0 {
+ return false
+ }
+ }
+ return true
+}
+
+func main() {
+ cmp := 0
+ for i := uint64(0) ; i < 1000000000 ; i++ {
+ if i % 10 != 0 && // Check for leading zeroes
+ hasOnlyOdd( i + reverse(i) ) {
+ cmp++;
+ }
+ }
+ fmt.Println(cmp);
+}
diff --git a/p59/p_59.go b/p59/p_59.go
new file mode 100644
index 0000000..32d08c9
--- /dev/null
+++ b/p59/p_59.go
@@ -0,0 +1,108 @@
+
+package main
+import (
+ "fmt"
+ "math"
+)
+
+
+var cipher = [...]rune{79,59,12,2,79,35,8,28,20,2,3,68,8,9,68,45,0,12,9,67,68,4,7,5,23,27,1,21,79,85,78,79,85,71,38,10,71,27,12,2,79,6,2,8,13,9,1,13,9,8,68,19,7,1,71,56,11,21,11,68,6,3,22,2,14,0,30,79,1,31,6,23,19,10,0,73,79,44,2,79,19,6,28,68,16,6,16,15,79,35,8,11,72,71,14,10,3,79,12,2,79,19,6,28,68,32,0,0,73,79,86,71,39,1,71,24,5,20,79,13,9,79,16,15,10,68,5,10,3,14,1,10,14,1,3,71,24,13,19,7,68,32,0,0,73,79,87,71,39,1,71,12,22,2,14,16,2,11,68,2,25,1,21,22,16,15,6,10,0,79,16,15,10,22,2,79,13,20,65,68,41,0,16,15,6,10,0,79,1,31,6,23,19,28,68,19,7,5,19,79,12,2,79,0,14,11,10,64,27,68,10,14,15,2,65,68,83,79,40,14,9,1,71,6,16,20,10,8,1,79,19,6,28,68,14,1,68,15,6,9,75,79,5,9,11,68,19,7,13,20,79,8,14,9,1,71,8,13,17,10,23,71,3,13,0,7,16,71,27,11,71,10,18,2,29,29,8,1,1,73,79,81,71,59,12,2,79,8,14,8,12,19,79,23,15,6,10,2,28,68,19,7,22,8,26,3,15,79,16,15,10,68,3,14,22,12,1,1,20,28,72,71,14,10,3,79,16,15,10,68,3,14,22,12,1,1,20,28,68,4,14,10,71,1,1,17,10,22,71,10,28,19,6,10,0,26,13,20,7,68,14,27,74,71,89,68,32,0,0,71,28,1,9,27,68,45,0,12,9,79,16,15,10,68,37,14,20,19,6,23,19,79,83,71,27,11,71,27,1,11,3,68,2,25,1,21,22,11,9,10,68,6,13,11,18,27,68,19,7,1,71,3,13,0,7,16,71,28,11,71,27,12,6,27,68,2,25,1,21,22,11,9,10,68,10,6,3,15,27,68,5,10,8,14,10,18,2,79,6,2,12,5,18,28,1,71,0,2,71,7,13,20,79,16,2,28,16,14,2,11,9,22,74,71,87,68,45,0,12,9,79,12,14,2,23,2,3,2,71,24,5,20,79,10,8,27,68,19,7,1,71,3,13,0,7,16,92,79,12,2,79,19,6,28,68,8,1,8,30,79,5,71,24,13,19,1,1,20,28,68,19,0,68,19,7,1,71,3,13,0,7,16,73,79,93,71,59,12,2,79,11,9,10,68,16,7,11,71,6,23,71,27,12,2,79,16,21,26,1,71,3,13,0,7,16,75,79,19,15,0,68,0,6,18,2,28,68,11,6,3,15,27,68,19,0,68,2,25,1,21,22,11,9,10,72,71,24,5,20,79,3,8,6,10,0,79,16,8,79,7,8,2,1,71,6,10,19,0,68,19,7,1,71,24,11,21,3,0,73,79,85,87,79,38,18,27,68,6,3,16,15,0,17,0,7,68,19,7,1,71,24,11,21,3,0,71,24,5,20,79,9,6,11,1,71,27,12,21,0,17,0,7,68,15,6,9,75,79,16,15,10,68,16,0,22,11,11,68,3,6,0,9,72,16,71,29,1,4,0,3,9,6,30,2,79,12,14,2,68,16,7,1,9,79,12,2,79,7,6,2,1,73,79,85,86,79,33,17,10,10,71,6,10,71,7,13,20,79,11,16,1,68,11,14,10,3,79,5,9,11,68,6,2,11,9,8,68,15,6,23,71,0,19,9,79,20,2,0,20,11,10,72,71,7,1,71,24,5,20,79,10,8,27,68,6,12,7,2,31,16,2,11,74,71,94,86,71,45,17,19,79,16,8,79,5,11,3,68,16,7,11,71,13,1,11,6,1,17,10,0,71,7,13,10,79,5,9,11,68,6,12,7,2,31,16,2,11,68,15,6,9,75,79,12,2,79,3,6,25,1,71,27,12,2,79,22,14,8,12,19,79,16,8,79,6,2,12,11,10,10,68,4,7,13,11,11,22,2,1,68,8,9,68,32,0,0,73,79,85,84,79,48,15,10,29,71,14,22,2,79,22,2,13,11,21,1,69,71,59,12,14,28,68,14,28,68,9,0,16,71,14,68,23,7,29,20,6,7,6,3,68,5,6,22,19,7,68,21,10,23,18,3,16,14,1,3,71,9,22,8,2,68,15,26,9,6,1,68,23,14,23,20,6,11,9,79,11,21,79,20,11,14,10,75,79,16,15,6,23,71,29,1,5,6,22,19,7,68,4,0,9,2,28,68,1,29,11,10,79,35,8,11,74,86,91,68,52,0,68,19,7,1,71,56,11,21,11,68,5,10,7,6,2,1,71,7,17,10,14,10,71,14,10,3,79,8,14,25,1,3,79,12,2,29,1,71,0,10,71,10,5,21,27,12,71,14,9,8,1,3,71,26,23,73,79,44,2,79,19,6,28,68,1,26,8,11,79,11,1,79,17,9,9,5,14,3,13,9,8,68,11,0,18,2,79,5,9,11,68,1,14,13,19,7,2,18,3,10,2,28,23,73,79,37,9,11,68,16,10,68,15,14,18,2,79,23,2,10,10,71,7,13,20,79,3,11,0,22,30,67,68,19,7,1,71,8,8,8,29,29,71,0,2,71,27,12,2,79,11,9,3,29,71,60,11,9,79,11,1,79,16,15,10,68,33,14,16,15,10,22,73};
+
+var freq = map[rune]float64 {
+ 'a': 8.167,
+ 'b': 1.492,
+ 'c': 2.782,
+ 'd': 4.253,
+ 'e': 12.702,
+ 'f': 2.228,
+ 'g': 2.015,
+ 'h': 6.094,
+ 'i': 6.966,
+ 'j': 0.153,
+ 'k': 0.772,
+ 'l': 4.025,
+ 'm': 2.406,
+ 'n': 6.749,
+ 'o': 7.507,
+ 'p': 1.929,
+ 'q': 0.095,
+ 'r': 5.987,
+ 's': 6.327,
+ 't': 9.056,
+ 'u': 2.758,
+ 'v': 0.978,
+ 'w': 2.360,
+ 'x': 0.150,
+ 'y': 1.974,
+ 'z': 0.074,
+}
+
+func indexProb( plain []rune ) float64 {
+ pFreq:= make(map[rune]int);
+ nbC := 0
+
+ for c := 'a' ; c <= 'z' ; c++ {
+ pFreq[c] = 0
+ }
+
+ for _,r := range plain {
+ if 'a' <= r && 'z' >= r {
+ pFreq[r]++
+ nbC += 1
+ } else if 'A' <= r && 'Z' >= r {
+ r = r+'a'-'A';
+ pFreq[r]++
+ nbC += 1
+ }
+ }
+
+
+ delta := float64(0)
+
+ for c := 'a' ; c <= 'z' ; c++ {
+ delta += math.Abs(freq[c] - float64(pFreq[c])/float64(nbC)*100)
+ }
+
+ return delta
+}
+
+func main() {
+
+ key := [3]rune{};
+ bestDelta := 1000000000.
+ bestKey := ""
+ plain := make([]rune, len(cipher));
+
+ for key[0] = 'a' ; key[0] <= 'z' ; key[0]++ {
+ for key[1] = 'a' ; key[1] <= 'z' ; key[1]++ {
+ for key[2] = 'a' ; key[2] <= 'z' ; key[2]++ {
+
+ for i := range cipher {
+ plain[i] = cipher[i] ^ key[i%3];
+ }
+
+ tmpDelta := indexProb( plain )
+
+ if tmpDelta < bestDelta {
+ bestKey = fmt.Sprintf("%c%c%c", key[0], key[1], key[2])
+ bestDelta = tmpDelta
+ }
+ }
+ }
+ }
+
+ for i := range cipher {
+ plain[i] = cipher[i] ^ rune(bestKey[i%3]);
+ }
+
+ answer := 0
+
+ for i := range plain {
+ fmt.Printf("%c", plain[i])
+ answer += int(plain[i])
+ }
+
+
+ fmt.Println("\nBest key :", bestKey);
+ fmt.Printf("Answer : %d\n", answer);
+}
diff --git a/p71/p_71.cpp b/p71/p_71.cpp
new file mode 100644
index 0000000..a2d3693
--- /dev/null
+++ b/p71/p_71.cpp
@@ -0,0 +1,20 @@
+#include <iostream>
+
+const int digitToFact[] = {
+ [0] = 1,
+ [1] = 1,
+ [2] = 2,
+ [3] = 6,
+ [4] = 24,
+ [5] = 120,
+ [6] = 720,
+ [7] = 5040,
+ [8] = 40320,
+ [9] = 362880
+};
+
+int main() {
+
+
+ return EXIT_SUCCESS;
+}
diff --git a/p71/p_71.go b/p71/p_71.go
new file mode 100644
index 0000000..941989d
--- /dev/null
+++ b/p71/p_71.go
@@ -0,0 +1,118 @@
+package main
+
+import (
+ "fmt"
+ "math/big"
+)
+
+
+var digitToFact= map[rune]*big.Int{
+ '0' : big.NewInt(1),
+ '1' : big.NewInt(1),
+ '2' : big.NewInt(2),
+ '3' : big.NewInt(6),
+ '4' : big.NewInt(24),
+ '5' : big.NewInt(120),
+ '6' : big.NewInt(720),
+ '7' : big.NewInt(5040),
+ '8' : big.NewInt(40320),
+ '9' : big.NewInt(362880),
+}
+
+func sliceIndexOfUint64( slice[]uint64, x uint64) int {
+ for i,e := range slice {
+ if e == x {
+ return i;
+ }
+ }
+ return -1
+}
+
+
+
+func main() {
+
+ number := [1000000]int{};
+
+ for init_int := uint64(0) ; init_int < 1000000 ; init_int++ {
+ init := big.NewInt(0);
+ tmp := big.NewInt(0);
+ init.SetUint64(init_int)
+ tmp.SetUint64(init_int)
+
+ cmp := 0;
+
+ pile := make([]uint64, 0, 61);
+
+
+ isKnow := func ( e *big.Int ) bool {
+ if e.IsUint64() {
+ v := e.Uint64();
+
+ if sliceIndexOfUint64(pile, v) >= 0 {
+ return true;
+ }
+
+ if v < 1000000 {
+ return number[v] != 0;
+ }
+ }
+ return false;
+ }
+
+ for b := true ; b ; b = !isKnow( tmp ) && cmp < 60 {
+
+ if tmp.IsUint64() {
+ pile = append(pile, tmp.Uint64());
+ }
+
+ tmp2 := big.NewInt(0);
+
+ for _,c := range tmp.String() {
+ tmp2 = tmp2.Add(tmp2, digitToFact[c]);
+ }
+
+ cmp += 1;
+ tmp = tmp2;
+ }
+
+ if isKnow( tmp ) {
+
+ v := tmp.Uint64()
+ i := sliceIndexOfUint64(pile, v)
+
+ if sliceIndexOfUint64([]uint64{169, 871, 872, 69, 145, 540, 78}, init_int) >= 0 {
+ }
+
+ if( i >= 0 ) {
+
+ for index := i ; index < len(pile) ; index++ {
+ number[ pile[index] ] = len(pile) - i;
+ }
+ for index := i - 1 ; index >= 0 ; index-- {
+ number[ pile[index] ] = i - index + number[ pile[i] ];
+ }
+ } else if v < 1000000 && number[v] != 0 {
+ cmp += number[v];
+ for i,e := range pile {
+ if e < 1000000 {
+ if number[e] == 0 {
+ number[ e ] = cmp - i;
+ }
+ }
+ }
+ }
+ }
+
+ if number[init_int] == 60 {
+ fmt.Printf("#%d %d\n", number[init_int], init_int);
+ }
+
+
+ }
+
+
+}
+
+
+
diff --git a/p82/p082_matrix.txt b/p82/p082_matrix.txt
new file mode 100644
index 0000000..f65322a
--- /dev/null
+++ b/p82/p082_matrix.txt
@@ -0,0 +1,80 @@
+4445,2697,5115,718,2209,2212,654,4348,3079,6821,7668,3276,8874,4190,3785,2752,9473,7817,9137,496,7338,3434,7152,4355,4552,7917,7827,2460,2350,691,3514,5880,3145,7633,7199,3783,5066,7487,3285,1084,8985,760,872,8609,8051,1134,9536,5750,9716,9371,7619,5617,275,9721,2997,2698,1887,8825,6372,3014,2113,7122,7050,6775,5948,2758,1219,3539,348,7989,2735,9862,1263,8089,6401,9462,3168,2758,3748,5870
+1096,20,1318,7586,5167,2642,1443,5741,7621,7030,5526,4244,2348,4641,9827,2448,6918,5883,3737,300,7116,6531,567,5997,3971,6623,820,6148,3287,1874,7981,8424,7672,7575,6797,6717,1078,5008,4051,8795,5820,346,1851,6463,2117,6058,3407,8211,117,4822,1317,4377,4434,5925,8341,4800,1175,4173,690,8978,7470,1295,3799,8724,3509,9849,618,3320,7068,9633,2384,7175,544,6583,1908,9983,481,4187,9353,9377
+9607,7385,521,6084,1364,8983,7623,1585,6935,8551,2574,8267,4781,3834,2764,2084,2669,4656,9343,7709,2203,9328,8004,6192,5856,3555,2260,5118,6504,1839,9227,1259,9451,1388,7909,5733,6968,8519,9973,1663,5315,7571,3035,4325,4283,2304,6438,3815,9213,9806,9536,196,5542,6907,2475,1159,5820,9075,9470,2179,9248,1828,4592,9167,3713,4640,47,3637,309,7344,6955,346,378,9044,8635,7466,5036,9515,6385,9230
+7206,3114,7760,1094,6150,5182,7358,7387,4497,955,101,1478,7777,6966,7010,8417,6453,4955,3496,107,449,8271,131,2948,6185,784,5937,8001,6104,8282,4165,3642,710,2390,575,715,3089,6964,4217,192,5949,7006,715,3328,1152,66,8044,4319,1735,146,4818,5456,6451,4113,1063,4781,6799,602,1504,6245,6550,1417,1343,2363,3785,5448,4545,9371,5420,5068,4613,4882,4241,5043,7873,8042,8434,3939,9256,2187
+3620,8024,577,9997,7377,7682,1314,1158,6282,6310,1896,2509,5436,1732,9480,706,496,101,6232,7375,2207,2306,110,6772,3433,2878,8140,5933,8688,1399,2210,7332,6172,6403,7333,4044,2291,1790,2446,7390,8698,5723,3678,7104,1825,2040,140,3982,4905,4160,2200,5041,2512,1488,2268,1175,7588,8321,8078,7312,977,5257,8465,5068,3453,3096,1651,7906,253,9250,6021,8791,8109,6651,3412,345,4778,5152,4883,7505
+1074,5438,9008,2679,5397,5429,2652,3403,770,9188,4248,2493,4361,8327,9587,707,9525,5913,93,1899,328,2876,3604,673,8576,6908,7659,2544,3359,3883,5273,6587,3065,1749,3223,604,9925,6941,2823,8767,7039,3290,3214,1787,7904,3421,7137,9560,8451,2669,9219,6332,1576,5477,6755,8348,4164,4307,2984,4012,6629,1044,2874,6541,4942,903,1404,9125,5160,8836,4345,2581,460,8438,1538,5507,668,3352,2678,6942
+4295,1176,5596,1521,3061,9868,7037,7129,8933,6659,5947,5063,3653,9447,9245,2679,767,714,116,8558,163,3927,8779,158,5093,2447,5782,3967,1716,931,7772,8164,1117,9244,5783,7776,3846,8862,6014,2330,6947,1777,3112,6008,3491,1906,5952,314,4602,8994,5919,9214,3995,5026,7688,6809,5003,3128,2509,7477,110,8971,3982,8539,2980,4689,6343,5411,2992,5270,5247,9260,2269,7474,1042,7162,5206,1232,4556,4757
+510,3556,5377,1406,5721,4946,2635,7847,4251,8293,8281,6351,4912,287,2870,3380,3948,5322,3840,4738,9563,1906,6298,3234,8959,1562,6297,8835,7861,239,6618,1322,2553,2213,5053,5446,4402,6500,5182,8585,6900,5756,9661,903,5186,7687,5998,7997,8081,8955,4835,6069,2621,1581,732,9564,1082,1853,5442,1342,520,1737,3703,5321,4793,2776,1508,1647,9101,2499,6891,4336,7012,3329,3212,1442,9993,3988,4930,7706
+9444,3401,5891,9716,1228,7107,109,3563,2700,6161,5039,4992,2242,8541,7372,2067,1294,3058,1306,320,8881,5756,9326,411,8650,8824,5495,8282,8397,2000,1228,7817,2099,6473,3571,5994,4447,1299,5991,543,7874,2297,1651,101,2093,3463,9189,6872,6118,872,1008,1779,2805,9084,4048,2123,5877,55,3075,1737,9459,4535,6453,3644,108,5982,4437,5213,1340,6967,9943,5815,669,8074,1838,6979,9132,9315,715,5048
+3327,4030,7177,6336,9933,5296,2621,4785,2755,4832,2512,2118,2244,4407,2170,499,7532,9742,5051,7687,970,6924,3527,4694,5145,1306,2165,5940,2425,8910,3513,1909,6983,346,6377,4304,9330,7203,6605,3709,3346,970,369,9737,5811,4427,9939,3693,8436,5566,1977,3728,2399,3985,8303,2492,5366,9802,9193,7296,1033,5060,9144,2766,1151,7629,5169,5995,58,7619,7565,4208,1713,6279,3209,4908,9224,7409,1325,8540
+6882,1265,1775,3648,4690,959,5837,4520,5394,1378,9485,1360,4018,578,9174,2932,9890,3696,116,1723,1178,9355,7063,1594,1918,8574,7594,7942,1547,6166,7888,354,6932,4651,1010,7759,6905,661,7689,6092,9292,3845,9605,8443,443,8275,5163,7720,7265,6356,7779,1798,1754,5225,6661,1180,8024,5666,88,9153,1840,3508,1193,4445,2648,3538,6243,6375,8107,5902,5423,2520,1122,5015,6113,8859,9370,966,8673,2442
+7338,3423,4723,6533,848,8041,7921,8277,4094,5368,7252,8852,9166,2250,2801,6125,8093,5738,4038,9808,7359,9494,601,9116,4946,2702,5573,2921,9862,1462,1269,2410,4171,2709,7508,6241,7522,615,2407,8200,4189,5492,5649,7353,2590,5203,4274,710,7329,9063,956,8371,3722,4253,4785,1194,4828,4717,4548,940,983,2575,4511,2938,1827,2027,2700,1236,841,5760,1680,6260,2373,3851,1841,4968,1172,5179,7175,3509
+4420,1327,3560,2376,6260,2988,9537,4064,4829,8872,9598,3228,1792,7118,9962,9336,4368,9189,6857,1829,9863,6287,7303,7769,2707,8257,2391,2009,3975,4993,3068,9835,3427,341,8412,2134,4034,8511,6421,3041,9012,2983,7289,100,1355,7904,9186,6920,5856,2008,6545,8331,3655,5011,839,8041,9255,6524,3862,8788,62,7455,3513,5003,8413,3918,2076,7960,6108,3638,6999,3436,1441,4858,4181,1866,8731,7745,3744,1000
+356,8296,8325,1058,1277,4743,3850,2388,6079,6462,2815,5620,8495,5378,75,4324,3441,9870,1113,165,1544,1179,2834,562,6176,2313,6836,8839,2986,9454,5199,6888,1927,5866,8760,320,1792,8296,7898,6121,7241,5886,5814,2815,8336,1576,4314,3109,2572,6011,2086,9061,9403,3947,5487,9731,7281,3159,1819,1334,3181,5844,5114,9898,4634,2531,4412,6430,4262,8482,4546,4555,6804,2607,9421,686,8649,8860,7794,6672
+9870,152,1558,4963,8750,4754,6521,6256,8818,5208,5691,9659,8377,9725,5050,5343,2539,6101,1844,9700,7750,8114,5357,3001,8830,4438,199,9545,8496,43,2078,327,9397,106,6090,8181,8646,6414,7499,5450,4850,6273,5014,4131,7639,3913,6571,8534,9703,4391,7618,445,1320,5,1894,6771,7383,9191,4708,9706,6939,7937,8726,9382,5216,3685,2247,9029,8154,1738,9984,2626,9438,4167,6351,5060,29,1218,1239,4785
+192,5213,8297,8974,4032,6966,5717,1179,6523,4679,9513,1481,3041,5355,9303,9154,1389,8702,6589,7818,6336,3539,5538,3094,6646,6702,6266,2759,4608,4452,617,9406,8064,6379,444,5602,4950,1810,8391,1536,316,8714,1178,5182,5863,5110,5372,4954,1978,2971,5680,4863,2255,4630,5723,2168,538,1692,1319,7540,440,6430,6266,7712,7385,5702,620,641,3136,7350,1478,3155,2820,9109,6261,1122,4470,14,8493,2095
+1046,4301,6082,474,4974,7822,2102,5161,5172,6946,8074,9716,6586,9962,9749,5015,2217,995,5388,4402,7652,6399,6539,1349,8101,3677,1328,9612,7922,2879,231,5887,2655,508,4357,4964,3554,5930,6236,7384,4614,280,3093,9600,2110,7863,2631,6626,6620,68,1311,7198,7561,1768,5139,1431,221,230,2940,968,5283,6517,2146,1646,869,9402,7068,8645,7058,1765,9690,4152,2926,9504,2939,7504,6074,2944,6470,7859
+4659,736,4951,9344,1927,6271,8837,8711,3241,6579,7660,5499,5616,3743,5801,4682,9748,8796,779,1833,4549,8138,4026,775,4170,2432,4174,3741,7540,8017,2833,4027,396,811,2871,1150,9809,2719,9199,8504,1224,540,2051,3519,7982,7367,2761,308,3358,6505,2050,4836,5090,7864,805,2566,2409,6876,3361,8622,5572,5895,3280,441,7893,8105,1634,2929,274,3926,7786,6123,8233,9921,2674,5340,1445,203,4585,3837
+5759,338,7444,7968,7742,3755,1591,4839,1705,650,7061,2461,9230,9391,9373,2413,1213,431,7801,4994,2380,2703,6161,6878,8331,2538,6093,1275,5065,5062,2839,582,1014,8109,3525,1544,1569,8622,7944,2905,6120,1564,1839,5570,7579,1318,2677,5257,4418,5601,7935,7656,5192,1864,5886,6083,5580,6202,8869,1636,7907,4759,9082,5854,3185,7631,6854,5872,5632,5280,1431,2077,9717,7431,4256,8261,9680,4487,4752,4286
+1571,1428,8599,1230,7772,4221,8523,9049,4042,8726,7567,6736,9033,2104,4879,4967,6334,6716,3994,1269,8995,6539,3610,7667,6560,6065,874,848,4597,1711,7161,4811,6734,5723,6356,6026,9183,2586,5636,1092,7779,7923,8747,6887,7505,9909,1792,3233,4526,3176,1508,8043,720,5212,6046,4988,709,5277,8256,3642,1391,5803,1468,2145,3970,6301,7767,2359,8487,9771,8785,7520,856,1605,8972,2402,2386,991,1383,5963
+1822,4824,5957,6511,9868,4113,301,9353,6228,2881,2966,6956,9124,9574,9233,1601,7340,973,9396,540,4747,8590,9535,3650,7333,7583,4806,3593,2738,8157,5215,8472,2284,9473,3906,6982,5505,6053,7936,6074,7179,6688,1564,1103,6860,5839,2022,8490,910,7551,7805,881,7024,1855,9448,4790,1274,3672,2810,774,7623,4223,4850,6071,9975,4935,1915,9771,6690,3846,517,463,7624,4511,614,6394,3661,7409,1395,8127
+8738,3850,9555,3695,4383,2378,87,6256,6740,7682,9546,4255,6105,2000,1851,4073,8957,9022,6547,5189,2487,303,9602,7833,1628,4163,6678,3144,8589,7096,8913,5823,4890,7679,1212,9294,5884,2972,3012,3359,7794,7428,1579,4350,7246,4301,7779,7790,3294,9547,4367,3549,1958,8237,6758,3497,3250,3456,6318,1663,708,7714,6143,6890,3428,6853,9334,7992,591,6449,9786,1412,8500,722,5468,1371,108,3939,4199,2535
+7047,4323,1934,5163,4166,461,3544,2767,6554,203,6098,2265,9078,2075,4644,6641,8412,9183,487,101,7566,5622,1975,5726,2920,5374,7779,5631,3753,3725,2672,3621,4280,1162,5812,345,8173,9785,1525,955,5603,2215,2580,5261,2765,2990,5979,389,3907,2484,1232,5933,5871,3304,1138,1616,5114,9199,5072,7442,7245,6472,4760,6359,9053,7876,2564,9404,3043,9026,2261,3374,4460,7306,2326,966,828,3274,1712,3446
+3975,4565,8131,5800,4570,2306,8838,4392,9147,11,3911,7118,9645,4994,2028,6062,5431,2279,8752,2658,7836,994,7316,5336,7185,3289,1898,9689,2331,5737,3403,1124,2679,3241,7748,16,2724,5441,6640,9368,9081,5618,858,4969,17,2103,6035,8043,7475,2181,939,415,1617,8500,8253,2155,7843,7974,7859,1746,6336,3193,2617,8736,4079,6324,6645,8891,9396,5522,6103,1857,8979,3835,2475,1310,7422,610,8345,7615
+9248,5397,5686,2988,3446,4359,6634,9141,497,9176,6773,7448,1907,8454,916,1596,2241,1626,1384,2741,3649,5362,8791,7170,2903,2475,5325,6451,924,3328,522,90,4813,9737,9557,691,2388,1383,4021,1609,9206,4707,5200,7107,8104,4333,9860,5013,1224,6959,8527,1877,4545,7772,6268,621,4915,9349,5970,706,9583,3071,4127,780,8231,3017,9114,3836,7503,2383,1977,4870,8035,2379,9704,1037,3992,3642,1016,4303
+5093,138,4639,6609,1146,5565,95,7521,9077,2272,974,4388,2465,2650,722,4998,3567,3047,921,2736,7855,173,2065,4238,1048,5,6847,9548,8632,9194,5942,4777,7910,8971,6279,7253,2516,1555,1833,3184,9453,9053,6897,7808,8629,4877,1871,8055,4881,7639,1537,7701,2508,7564,5845,5023,2304,5396,3193,2955,1088,3801,6203,1748,3737,1276,13,4120,7715,8552,3047,2921,106,7508,304,1280,7140,2567,9135,5266
+6237,4607,7527,9047,522,7371,4883,2540,5867,6366,5301,1570,421,276,3361,527,6637,4861,2401,7522,5808,9371,5298,2045,5096,5447,7755,5115,7060,8529,4078,1943,1697,1764,5453,7085,960,2405,739,2100,5800,728,9737,5704,5693,1431,8979,6428,673,7540,6,7773,5857,6823,150,5869,8486,684,5816,9626,7451,5579,8260,3397,5322,6920,1879,2127,2884,5478,4977,9016,6165,6292,3062,5671,5968,78,4619,4763
+9905,7127,9390,5185,6923,3721,9164,9705,4341,1031,1046,5127,7376,6528,3248,4941,1178,7889,3364,4486,5358,9402,9158,8600,1025,874,1839,1783,309,9030,1843,845,8398,1433,7118,70,8071,2877,3904,8866,6722,4299,10,1929,5897,4188,600,1889,3325,2485,6473,4474,7444,6992,4846,6166,4441,2283,2629,4352,7775,1101,2214,9985,215,8270,9750,2740,8361,7103,5930,8664,9690,8302,9267,344,2077,1372,1880,9550
+5825,8517,7769,2405,8204,1060,3603,7025,478,8334,1997,3692,7433,9101,7294,7498,9415,5452,3850,3508,6857,9213,6807,4412,7310,854,5384,686,4978,892,8651,3241,2743,3801,3813,8588,6701,4416,6990,6490,3197,6838,6503,114,8343,5844,8646,8694,65,791,5979,2687,2621,2019,8097,1423,3644,9764,4921,3266,3662,5561,2476,8271,8138,6147,1168,3340,1998,9874,6572,9873,6659,5609,2711,3931,9567,4143,7833,8887
+6223,2099,2700,589,4716,8333,1362,5007,2753,2848,4441,8397,7192,8191,4916,9955,6076,3370,6396,6971,3156,248,3911,2488,4930,2458,7183,5455,170,6809,6417,3390,1956,7188,577,7526,2203,968,8164,479,8699,7915,507,6393,4632,1597,7534,3604,618,3280,6061,9793,9238,8347,568,9645,2070,5198,6482,5000,9212,6655,5961,7513,1323,3872,6170,3812,4146,2736,67,3151,5548,2781,9679,7564,5043,8587,1893,4531
+5826,3690,6724,2121,9308,6986,8106,6659,2142,1642,7170,2877,5757,6494,8026,6571,8387,9961,6043,9758,9607,6450,8631,8334,7359,5256,8523,2225,7487,1977,9555,8048,5763,2414,4948,4265,2427,8978,8088,8841,9208,9601,5810,9398,8866,9138,4176,5875,7212,3272,6759,5678,7649,4922,5422,1343,8197,3154,3600,687,1028,4579,2084,9467,4492,7262,7296,6538,7657,7134,2077,1505,7332,6890,8964,4879,7603,7400,5973,739
+1861,1613,4879,1884,7334,966,2000,7489,2123,4287,1472,3263,4726,9203,1040,4103,6075,6049,330,9253,4062,4268,1635,9960,577,1320,3195,9628,1030,4092,4979,6474,6393,2799,6967,8687,7724,7392,9927,2085,3200,6466,8702,265,7646,8665,7986,7266,4574,6587,612,2724,704,3191,8323,9523,3002,704,5064,3960,8209,2027,2758,8393,4875,4641,9584,6401,7883,7014,768,443,5490,7506,1852,2005,8850,5776,4487,4269
+4052,6687,4705,7260,6645,6715,3706,5504,8672,2853,1136,8187,8203,4016,871,1809,1366,4952,9294,5339,6872,2645,6083,7874,3056,5218,7485,8796,7401,3348,2103,426,8572,4163,9171,3176,948,7654,9344,3217,1650,5580,7971,2622,76,2874,880,2034,9929,1546,2659,5811,3754,7096,7436,9694,9960,7415,2164,953,2360,4194,2397,1047,2196,6827,575,784,2675,8821,6802,7972,5996,6699,2134,7577,2887,1412,4349,4380
+4629,2234,6240,8132,7592,3181,6389,1214,266,1910,2451,8784,2790,1127,6932,1447,8986,2492,5476,397,889,3027,7641,5083,5776,4022,185,3364,5701,2442,2840,4160,9525,4828,6602,2614,7447,3711,4505,7745,8034,6514,4907,2605,7753,6958,7270,6936,3006,8968,439,2326,4652,3085,3425,9863,5049,5361,8688,297,7580,8777,7916,6687,8683,7141,306,9569,2384,1500,3346,4601,7329,9040,6097,2727,6314,4501,4974,2829
+8316,4072,2025,6884,3027,1808,5714,7624,7880,8528,4205,8686,7587,3230,1139,7273,6163,6986,3914,9309,1464,9359,4474,7095,2212,7302,2583,9462,7532,6567,1606,4436,8981,5612,6796,4385,5076,2007,6072,3678,8331,1338,3299,8845,4783,8613,4071,1232,6028,2176,3990,2148,3748,103,9453,538,6745,9110,926,3125,473,5970,8728,7072,9062,1404,1317,5139,9862,6496,6062,3338,464,1600,2532,1088,8232,7739,8274,3873
+2341,523,7096,8397,8301,6541,9844,244,4993,2280,7689,4025,4196,5522,7904,6048,2623,9258,2149,9461,6448,8087,7245,1917,8340,7127,8466,5725,6996,3421,5313,512,9164,9837,9794,8369,4185,1488,7210,1524,1016,4620,9435,2478,7765,8035,697,6677,3724,6988,5853,7662,3895,9593,1185,4727,6025,5734,7665,3070,138,8469,6748,6459,561,7935,8646,2378,462,7755,3115,9690,8877,3946,2728,8793,244,6323,8666,4271
+6430,2406,8994,56,1267,3826,9443,7079,7579,5232,6691,3435,6718,5698,4144,7028,592,2627,217,734,6194,8156,9118,58,2640,8069,4127,3285,694,3197,3377,4143,4802,3324,8134,6953,7625,3598,3584,4289,7065,3434,2106,7132,5802,7920,9060,7531,3321,1725,1067,3751,444,5503,6785,7937,6365,4803,198,6266,8177,1470,6390,1606,2904,7555,9834,8667,2033,1723,5167,1666,8546,8152,473,4475,6451,7947,3062,3281
+2810,3042,7759,1741,2275,2609,7676,8640,4117,1958,7500,8048,1757,3954,9270,1971,4796,2912,660,5511,3553,1012,5757,4525,6084,7198,8352,5775,7726,8591,7710,9589,3122,4392,6856,5016,749,2285,3356,7482,9956,7348,2599,8944,495,3462,3578,551,4543,7207,7169,7796,1247,4278,6916,8176,3742,8385,2310,1345,8692,2667,4568,1770,8319,3585,4920,3890,4928,7343,5385,9772,7947,8786,2056,9266,3454,2807,877,2660
+6206,8252,5928,5837,4177,4333,207,7934,5581,9526,8906,1498,8411,2984,5198,5134,2464,8435,8514,8674,3876,599,5327,826,2152,4084,2433,9327,9697,4800,2728,3608,3849,3861,3498,9943,1407,3991,7191,9110,5666,8434,4704,6545,5944,2357,1163,4995,9619,6754,4200,9682,6654,4862,4744,5953,6632,1054,293,9439,8286,2255,696,8709,1533,1844,6441,430,1999,6063,9431,7018,8057,2920,6266,6799,356,3597,4024,6665
+3847,6356,8541,7225,2325,2946,5199,469,5450,7508,2197,9915,8284,7983,6341,3276,3321,16,1321,7608,5015,3362,8491,6968,6818,797,156,2575,706,9516,5344,5457,9210,5051,8099,1617,9951,7663,8253,9683,2670,1261,4710,1068,8753,4799,1228,2621,3275,6188,4699,1791,9518,8701,5932,4275,6011,9877,2933,4182,6059,2930,6687,6682,9771,654,9437,3169,8596,1827,5471,8909,2352,123,4394,3208,8756,5513,6917,2056
+5458,8173,3138,3290,4570,4892,3317,4251,9699,7973,1163,1935,5477,6648,9614,5655,9592,975,9118,2194,7322,8248,8413,3462,8560,1907,7810,6650,7355,2939,4973,6894,3933,3784,3200,2419,9234,4747,2208,2207,1945,2899,1407,6145,8023,3484,5688,7686,2737,3828,3704,9004,5190,9740,8643,8650,5358,4426,1522,1707,3613,9887,6956,2447,2762,833,1449,9489,2573,1080,4167,3456,6809,2466,227,7125,2759,6250,6472,8089
+3266,7025,9756,3914,1265,9116,7723,9788,6805,5493,2092,8688,6592,9173,4431,4028,6007,7131,4446,4815,3648,6701,759,3312,8355,4485,4187,5188,8746,7759,3528,2177,5243,8379,3838,7233,4607,9187,7216,2190,6967,2920,6082,7910,5354,3609,8958,6949,7731,494,8753,8707,1523,4426,3543,7085,647,6771,9847,646,5049,824,8417,5260,2730,5702,2513,9275,4279,2767,8684,1165,9903,4518,55,9682,8963,6005,2102,6523
+1998,8731,936,1479,5259,7064,4085,91,7745,7136,3773,3810,730,8255,2705,2653,9790,6807,2342,355,9344,2668,3690,2028,9679,8102,574,4318,6481,9175,5423,8062,2867,9657,7553,3442,3920,7430,3945,7639,3714,3392,2525,4995,4850,2867,7951,9667,486,9506,9888,781,8866,1702,3795,90,356,1483,4200,2131,6969,5931,486,6880,4404,1084,5169,4910,6567,8335,4686,5043,2614,3352,2667,4513,6472,7471,5720,1616
+8878,1613,1716,868,1906,2681,564,665,5995,2474,7496,3432,9491,9087,8850,8287,669,823,347,6194,2264,2592,7871,7616,8508,4827,760,2676,4660,4881,7572,3811,9032,939,4384,929,7525,8419,5556,9063,662,8887,7026,8534,3111,1454,2082,7598,5726,6687,9647,7608,73,3014,5063,670,5461,5631,3367,9796,8475,7908,5073,1565,5008,5295,4457,1274,4788,1728,338,600,8415,8535,9351,7750,6887,5845,1741,125
+3637,6489,9634,9464,9055,2413,7824,9517,7532,3577,7050,6186,6980,9365,9782,191,870,2497,8498,2218,2757,5420,6468,586,3320,9230,1034,1393,9886,5072,9391,1178,8464,8042,6869,2075,8275,3601,7715,9470,8786,6475,8373,2159,9237,2066,3264,5000,679,355,3069,4073,494,2308,5512,4334,9438,8786,8637,9774,1169,1949,6594,6072,4270,9158,7916,5752,6794,9391,6301,5842,3285,2141,3898,8027,4310,8821,7079,1307
+8497,6681,4732,7151,7060,5204,9030,7157,833,5014,8723,3207,9796,9286,4913,119,5118,7650,9335,809,3675,2597,5144,3945,5090,8384,187,4102,1260,2445,2792,4422,8389,9290,50,1765,1521,6921,8586,4368,1565,5727,7855,2003,4834,9897,5911,8630,5070,1330,7692,7557,7980,6028,5805,9090,8265,3019,3802,698,9149,5748,1965,9658,4417,5994,5584,8226,2937,272,5743,1278,5698,8736,2595,6475,5342,6596,1149,6920
+8188,8009,9546,6310,8772,2500,9846,6592,6872,3857,1307,8125,7042,1544,6159,2330,643,4604,7899,6848,371,8067,2062,3200,7295,1857,9505,6936,384,2193,2190,301,8535,5503,1462,7380,5114,4824,8833,1763,4974,8711,9262,6698,3999,2645,6937,7747,1128,2933,3556,7943,2885,3122,9105,5447,418,2899,5148,3699,9021,9501,597,4084,175,1621,1,1079,6067,5812,4326,9914,6633,5394,4233,6728,9084,1864,5863,1225
+9935,8793,9117,1825,9542,8246,8437,3331,9128,9675,6086,7075,319,1334,7932,3583,7167,4178,1726,7720,695,8277,7887,6359,5912,1719,2780,8529,1359,2013,4498,8072,1129,9998,1147,8804,9405,6255,1619,2165,7491,1,8882,7378,3337,503,5758,4109,3577,985,3200,7615,8058,5032,1080,6410,6873,5496,1466,2412,9885,5904,4406,3605,8770,4361,6205,9193,1537,9959,214,7260,9566,1685,100,4920,7138,9819,5637,976
+3466,9854,985,1078,7222,8888,5466,5379,3578,4540,6853,8690,3728,6351,7147,3134,6921,9692,857,3307,4998,2172,5783,3931,9417,2541,6299,13,787,2099,9131,9494,896,8600,1643,8419,7248,2660,2609,8579,91,6663,5506,7675,1947,6165,4286,1972,9645,3805,1663,1456,8853,5705,9889,7489,1107,383,4044,2969,3343,152,7805,4980,9929,5033,1737,9953,7197,9158,4071,1324,473,9676,3984,9680,3606,8160,7384,5432
+1005,4512,5186,3953,2164,3372,4097,3247,8697,3022,9896,4101,3871,6791,3219,2742,4630,6967,7829,5991,6134,1197,1414,8923,8787,1394,8852,5019,7768,5147,8004,8825,5062,9625,7988,1110,3992,7984,9966,6516,6251,8270,421,3723,1432,4830,6935,8095,9059,2214,6483,6846,3120,1587,6201,6691,9096,9627,6671,4002,3495,9939,7708,7465,5879,6959,6634,3241,3401,2355,9061,2611,7830,3941,2177,2146,5089,7079,519,6351
+7280,8586,4261,2831,7217,3141,9994,9940,5462,2189,4005,6942,9848,5350,8060,6665,7519,4324,7684,657,9453,9296,2944,6843,7499,7847,1728,9681,3906,6353,5529,2822,3355,3897,7724,4257,7489,8672,4356,3983,1948,6892,7415,4153,5893,4190,621,1736,4045,9532,7701,3671,1211,1622,3176,4524,9317,7800,5638,6644,6943,5463,3531,2821,1347,5958,3436,1438,2999,994,850,4131,2616,1549,3465,5946,690,9273,6954,7991
+9517,399,3249,2596,7736,2142,1322,968,7350,1614,468,3346,3265,7222,6086,1661,5317,2582,7959,4685,2807,2917,1037,5698,1529,3972,8716,2634,3301,3412,8621,743,8001,4734,888,7744,8092,3671,8941,1487,5658,7099,2781,99,1932,4443,4756,4652,9328,1581,7855,4312,5976,7255,6480,3996,2748,1973,9731,4530,2790,9417,7186,5303,3557,351,7182,9428,1342,9020,7599,1392,8304,2070,9138,7215,2008,9937,1106,7110
+7444,769,9688,632,1571,6820,8743,4338,337,3366,3073,1946,8219,104,4210,6986,249,5061,8693,7960,6546,1004,8857,5997,9352,4338,6105,5008,2556,6518,6694,4345,3727,7956,20,3954,8652,4424,9387,2035,8358,5962,5304,5194,8650,8282,1256,1103,2138,6679,1985,3653,2770,2433,4278,615,2863,1715,242,3790,2636,6998,3088,1671,2239,957,5411,4595,6282,2881,9974,2401,875,7574,2987,4587,3147,6766,9885,2965
+3287,3016,3619,6818,9073,6120,5423,557,2900,2015,8111,3873,1314,4189,1846,4399,7041,7583,2427,2864,3525,5002,2069,748,1948,6015,2684,438,770,8367,1663,7887,7759,1885,157,7770,4520,4878,3857,1137,3525,3050,6276,5569,7649,904,4533,7843,2199,5648,7628,9075,9441,3600,7231,2388,5640,9096,958,3058,584,5899,8150,1181,9616,1098,8162,6819,8171,1519,1140,7665,8801,2632,1299,9192,707,9955,2710,7314
+1772,2963,7578,3541,3095,1488,7026,2634,6015,4633,4370,2762,1650,2174,909,8158,2922,8467,4198,4280,9092,8856,8835,5457,2790,8574,9742,5054,9547,4156,7940,8126,9824,7340,8840,6574,3547,1477,3014,6798,7134,435,9484,9859,3031,4,1502,4133,1738,1807,4825,463,6343,9701,8506,9822,9555,8688,8168,3467,3234,6318,1787,5591,419,6593,7974,8486,9861,6381,6758,194,3061,4315,2863,4665,3789,2201,1492,4416
+126,8927,6608,5682,8986,6867,1715,6076,3159,788,3140,4744,830,9253,5812,5021,7616,8534,1546,9590,1101,9012,9821,8132,7857,4086,1069,7491,2988,1579,2442,4321,2149,7642,6108,250,6086,3167,24,9528,7663,2685,1220,9196,1397,5776,1577,1730,5481,977,6115,199,6326,2183,3767,5928,5586,7561,663,8649,9688,949,5913,9160,1870,5764,9887,4477,6703,1413,4995,5494,7131,2192,8969,7138,3997,8697,646,1028
+8074,1731,8245,624,4601,8706,155,8891,309,2552,8208,8452,2954,3124,3469,4246,3352,1105,4509,8677,9901,4416,8191,9283,5625,7120,2952,8881,7693,830,4580,8228,9459,8611,4499,1179,4988,1394,550,2336,6089,6872,269,7213,1848,917,6672,4890,656,1478,6536,3165,4743,4990,1176,6211,7207,5284,9730,4738,1549,4986,4942,8645,3698,9429,1439,2175,6549,3058,6513,1574,6988,8333,3406,5245,5431,7140,7085,6407
+7845,4694,2530,8249,290,5948,5509,1588,5940,4495,5866,5021,4626,3979,3296,7589,4854,1998,5627,3926,8346,6512,9608,1918,7070,4747,4182,2858,2766,4606,6269,4107,8982,8568,9053,4244,5604,102,2756,727,5887,2566,7922,44,5986,621,1202,374,6988,4130,3627,6744,9443,4568,1398,8679,397,3928,9159,367,2917,6127,5788,3304,8129,911,2669,1463,9749,264,4478,8940,1109,7309,2462,117,4692,7724,225,2312
+4164,3637,2000,941,8903,39,3443,7172,1031,3687,4901,8082,4945,4515,7204,9310,9349,9535,9940,218,1788,9245,2237,1541,5670,6538,6047,5553,9807,8101,1925,8714,445,8332,7309,6830,5786,5736,7306,2710,3034,1838,7969,6318,7912,2584,2080,7437,6705,2254,7428,820,782,9861,7596,3842,3631,8063,5240,6666,394,4565,7865,4895,9890,6028,6117,4724,9156,4473,4552,602,470,6191,4927,5387,884,3146,1978,3000
+4258,6880,1696,3582,5793,4923,2119,1155,9056,9698,6603,3768,5514,9927,9609,6166,6566,4536,4985,4934,8076,9062,6741,6163,7399,4562,2337,5600,2919,9012,8459,1308,6072,1225,9306,8818,5886,7243,7365,8792,6007,9256,6699,7171,4230,7002,8720,7839,4533,1671,478,7774,1607,2317,5437,4705,7886,4760,6760,7271,3081,2997,3088,7675,6208,3101,6821,6840,122,9633,4900,2067,8546,4549,2091,7188,5605,8599,6758,5229
+7854,5243,9155,3556,8812,7047,2202,1541,5993,4600,4760,713,434,7911,7426,7414,8729,322,803,7960,7563,4908,6285,6291,736,3389,9339,4132,8701,7534,5287,3646,592,3065,7582,2592,8755,6068,8597,1982,5782,1894,2900,6236,4039,6569,3037,5837,7698,700,7815,2491,7272,5878,3083,6778,6639,3589,5010,8313,2581,6617,5869,8402,6808,2951,2321,5195,497,2190,6187,1342,1316,4453,7740,4154,2959,1781,1482,8256
+7178,2046,4419,744,8312,5356,6855,8839,319,2962,5662,47,6307,8662,68,4813,567,2712,9931,1678,3101,8227,6533,4933,6656,92,5846,4780,6256,6361,4323,9985,1231,2175,7178,3034,9744,6155,9165,7787,5836,9318,7860,9644,8941,6480,9443,8188,5928,161,6979,2352,5628,6991,1198,8067,5867,6620,3778,8426,2994,3122,3124,6335,3918,8897,2655,9670,634,1088,1576,8935,7255,474,8166,7417,9547,2886,5560,3842
+6957,3111,26,7530,7143,1295,1744,6057,3009,1854,8098,5405,2234,4874,9447,2620,9303,27,7410,969,40,2966,5648,7596,8637,4238,3143,3679,7187,690,9980,7085,7714,9373,5632,7526,6707,3951,9734,4216,2146,3602,5371,6029,3039,4433,4855,4151,1449,3376,8009,7240,7027,4602,2947,9081,4045,8424,9352,8742,923,2705,4266,3232,2264,6761,363,2651,3383,7770,6730,7856,7340,9679,2158,610,4471,4608,910,6241
+4417,6756,1013,8797,658,8809,5032,8703,7541,846,3357,2920,9817,1745,9980,7593,4667,3087,779,3218,6233,5568,4296,2289,2654,7898,5021,9461,5593,8214,9173,4203,2271,7980,2983,5952,9992,8399,3468,1776,3188,9314,1720,6523,2933,621,8685,5483,8986,6163,3444,9539,4320,155,3992,2828,2150,6071,524,2895,5468,8063,1210,3348,9071,4862,483,9017,4097,6186,9815,3610,5048,1644,1003,9865,9332,2145,1944,2213
+9284,3803,4920,1927,6706,4344,7383,4786,9890,2010,5228,1224,3158,6967,8580,8990,8883,5213,76,8306,2031,4980,5639,9519,7184,5645,7769,3259,8077,9130,1317,3096,9624,3818,1770,695,2454,947,6029,3474,9938,3527,5696,4760,7724,7738,2848,6442,5767,6845,8323,4131,2859,7595,2500,4815,3660,9130,8580,7016,8231,4391,8369,3444,4069,4021,556,6154,627,2778,1496,4206,6356,8434,8491,3816,8231,3190,5575,1015
+3787,7572,1788,6803,5641,6844,1961,4811,8535,9914,9999,1450,8857,738,4662,8569,6679,2225,7839,8618,286,2648,5342,2294,3205,4546,176,8705,3741,6134,8324,8021,7004,5205,7032,6637,9442,5539,5584,4819,5874,5807,8589,6871,9016,983,1758,3786,1519,6241,185,8398,495,3370,9133,3051,4549,9674,7311,9738,3316,9383,2658,2776,9481,7558,619,3943,3324,6491,4933,153,9738,4623,912,3595,7771,7939,1219,4405
+2650,3883,4154,5809,315,7756,4430,1788,4451,1631,6461,7230,6017,5751,138,588,5282,2442,9110,9035,6349,2515,1570,6122,4192,4174,3530,1933,4186,4420,4609,5739,4135,2963,6308,1161,8809,8619,2796,3819,6971,8228,4188,1492,909,8048,2328,6772,8467,7671,9068,2226,7579,6422,7056,8042,3296,2272,3006,2196,7320,3238,3490,3102,37,1293,3212,4767,5041,8773,5794,4456,6174,7279,7054,2835,7053,9088,790,6640
+3101,1057,7057,3826,6077,1025,2955,1224,1114,6729,5902,4698,6239,7203,9423,1804,4417,6686,1426,6941,8071,1029,4985,9010,6122,6597,1622,1574,3513,1684,7086,5505,3244,411,9638,4150,907,9135,829,981,1707,5359,8781,9751,5,9131,3973,7159,1340,6955,7514,7993,6964,8198,1933,2797,877,3993,4453,8020,9349,8646,2779,8679,2961,3547,3374,3510,1129,3568,2241,2625,9138,5974,8206,7669,7678,1833,8700,4480
+4865,9912,8038,8238,782,3095,8199,1127,4501,7280,2112,2487,3626,2790,9432,1475,6312,8277,4827,2218,5806,7132,8752,1468,7471,6386,739,8762,8323,8120,5169,9078,9058,3370,9560,7987,8585,8531,5347,9312,1058,4271,1159,5286,5404,6925,8606,9204,7361,2415,560,586,4002,2644,1927,2824,768,4409,2942,3345,1002,808,4941,6267,7979,5140,8643,7553,9438,7320,4938,2666,4609,2778,8158,6730,3748,3867,1866,7181
+171,3771,7134,8927,4778,2913,3326,2004,3089,7853,1378,1729,4777,2706,9578,1360,5693,3036,1851,7248,2403,2273,8536,6501,9216,613,9671,7131,7719,6425,773,717,8803,160,1114,7554,7197,753,4513,4322,8499,4533,2609,4226,8710,6627,644,9666,6260,4870,5744,7385,6542,6203,7703,6130,8944,5589,2262,6803,6381,7414,6888,5123,7320,9392,9061,6780,322,8975,7050,5089,1061,2260,3199,1150,1865,5386,9699,6501
+3744,8454,6885,8277,919,1923,4001,6864,7854,5519,2491,6057,8794,9645,1776,5714,9786,9281,7538,6916,3215,395,2501,9618,4835,8846,9708,2813,3303,1794,8309,7176,2206,1602,1838,236,4593,2245,8993,4017,10,8215,6921,5206,4023,5932,6997,7801,262,7640,3107,8275,4938,7822,2425,3223,3886,2105,8700,9526,2088,8662,8034,7004,5710,2124,7164,3574,6630,9980,4242,2901,9471,1491,2117,4562,1130,9086,4117,6698
+2810,2280,2331,1170,4554,4071,8387,1215,2274,9848,6738,1604,7281,8805,439,1298,8318,7834,9426,8603,6092,7944,1309,8828,303,3157,4638,4439,9175,1921,4695,7716,1494,1015,1772,5913,1127,1952,1950,8905,4064,9890,385,9357,7945,5035,7082,5369,4093,6546,5187,5637,2041,8946,1758,7111,6566,1027,1049,5148,7224,7248,296,6169,375,1656,7993,2816,3717,4279,4675,1609,3317,42,6201,3100,3144,163,9530,4531
+7096,6070,1009,4988,3538,5801,7149,3063,2324,2912,7911,7002,4338,7880,2481,7368,3516,2016,7556,2193,1388,3865,8125,4637,4096,8114,750,3144,1938,7002,9343,4095,1392,4220,3455,6969,9647,1321,9048,1996,1640,6626,1788,314,9578,6630,2813,6626,4981,9908,7024,4355,3201,3521,3864,3303,464,1923,595,9801,3391,8366,8084,9374,1041,8807,9085,1892,9431,8317,9016,9221,8574,9981,9240,5395,2009,6310,2854,9255
+8830,3145,2960,9615,8220,6061,3452,2918,6481,9278,2297,3385,6565,7066,7316,5682,107,7646,4466,68,1952,9603,8615,54,7191,791,6833,2560,693,9733,4168,570,9127,9537,1925,8287,5508,4297,8452,8795,6213,7994,2420,4208,524,5915,8602,8330,2651,8547,6156,1812,6271,7991,9407,9804,1553,6866,1128,2119,4691,9711,8315,5879,9935,6900,482,682,4126,1041,428,6247,3720,5882,7526,2582,4327,7725,3503,2631
+2738,9323,721,7434,1453,6294,2957,3786,5722,6019,8685,4386,3066,9057,6860,499,5315,3045,5194,7111,3137,9104,941,586,3066,755,4177,8819,7040,5309,3583,3897,4428,7788,4721,7249,6559,7324,825,7311,3760,6064,6070,9672,4882,584,1365,9739,9331,5783,2624,7889,1604,1303,1555,7125,8312,425,8936,3233,7724,1480,403,7440,1784,1754,4721,1569,652,3893,4574,5692,9730,4813,9844,8291,9199,7101,3391,8914
+6044,2928,9332,3328,8588,447,3830,1176,3523,2705,8365,6136,5442,9049,5526,8575,8869,9031,7280,706,2794,8814,5767,4241,7696,78,6570,556,5083,1426,4502,3336,9518,2292,1885,3740,3153,9348,9331,8051,2759,5407,9028,7840,9255,831,515,2612,9747,7435,8964,4971,2048,4900,5967,8271,1719,9670,2810,6777,1594,6367,6259,8316,3815,1689,6840,9437,4361,822,9619,3065,83,6344,7486,8657,8228,9635,6932,4864
+8478,4777,6334,4678,7476,4963,6735,3096,5860,1405,5127,7269,7793,4738,227,9168,2996,8928,765,733,1276,7677,6258,1528,9558,3329,302,8901,1422,8277,6340,645,9125,8869,5952,141,8141,1816,9635,4025,4184,3093,83,2344,2747,9352,7966,1206,1126,1826,218,7939,2957,2729,810,8752,5247,4174,4038,8884,7899,9567,301,5265,5752,7524,4381,1669,3106,8270,6228,6373,754,2547,4240,2313,5514,3022,1040,9738
+2265,8192,1763,1369,8469,8789,4836,52,1212,6690,5257,8918,6723,6319,378,4039,2421,8555,8184,9577,1432,7139,8078,5452,9628,7579,4161,7490,5159,8559,1011,81,478,5840,1964,1334,6875,8670,9900,739,1514,8692,522,9316,6955,1345,8132,2277,3193,9773,3923,4177,2183,1236,6747,6575,4874,6003,6409,8187,745,8776,9440,7543,9825,2582,7381,8147,7236,5185,7564,6125,218,7991,6394,391,7659,7456,5128,5294
+2132,8992,8160,5782,4420,3371,3798,5054,552,5631,7546,4716,1332,6486,7892,7441,4370,6231,4579,2121,8615,1145,9391,1524,1385,2400,9437,2454,7896,7467,2928,8400,3299,4025,7458,4703,7206,6358,792,6200,725,4275,4136,7390,5984,4502,7929,5085,8176,4600,119,3568,76,9363,6943,2248,9077,9731,6213,5817,6729,4190,3092,6910,759,2682,8380,1254,9604,3011,9291,5329,9453,9746,2739,6522,3765,5634,1113,5789
+5304,5499,564,2801,679,2653,1783,3608,7359,7797,3284,796,3222,437,7185,6135,8571,2778,7488,5746,678,6140,861,7750,803,9859,9918,2425,3734,2698,9005,4864,9818,6743,2475,132,9486,3825,5472,919,292,4411,7213,7699,6435,9019,6769,1388,802,2124,1345,8493,9487,8558,7061,8777,8833,2427,2238,5409,4957,8503,3171,7622,5779,6145,2417,5873,5563,5693,9574,9491,1937,7384,4563,6842,5432,2751,3406,7981
diff --git a/p82/p82 b/p82/p82
new file mode 100755
index 0000000..e5fdc1a
--- /dev/null
+++ b/p82/p82
Binary files differ
diff --git a/p82/p82_test.txt b/p82/p82_test.txt
new file mode 100644
index 0000000..154bfad
--- /dev/null
+++ b/p82/p82_test.txt
@@ -0,0 +1,5 @@
+131, 673, 234, 103, 18
+201, 96, 342, 965, 150
+630, 803, 746, 422, 111
+537, 699, 497, 121, 956
+805, 732, 524, 37, 331
diff --git a/p82/p_82.go b/p82/p_82.go
new file mode 100644
index 0000000..f7df3bb
--- /dev/null
+++ b/p82/p_82.go
@@ -0,0 +1,103 @@
+package main
+
+import (
+ "fmt"
+ "strconv"
+ "log"
+ "encoding/csv"
+ "strings"
+ "io"
+ "os"
+)
+
+/* Cette fonction est inutile, c'est juste que j'ai réfléchis dans
+ ma tête de haut en bas, j'avais pas envie de réfléchir
+ de gauche à droite */
+
+func trans( r [][]int ) {
+ for i := range r {
+ for j := 0 ; j < i ; j++ {
+ r[i][j], r[j][i] = r[j][i], r[i][j]
+ }
+ }
+}
+
+
+func extractRecord( record []string ) []int {
+ row := make([]int, len(record))
+
+ for i := range record {
+ if v, err := strconv.Atoi(strings.TrimSpace(record[i])) ; err == nil {
+ row[i] = v
+ } else {
+ log.Fatalln(err)
+ }
+ }
+
+ return row
+}
+
+func min( nums ...int) int {
+ min := nums[0]
+
+ for _, num := range nums[1:] {
+ if num < min {
+ min = num
+ }
+ }
+ return min
+}
+
+func main() {
+ file, err := os.Open("p082_matrix.txt")
+
+ if err != nil {
+ log.Fatal(err)
+ }
+
+
+ r := csv.NewReader(file)
+
+ record, err := r.Read()
+
+ array := make([][]int, 0)
+
+ for ; err == nil ; record, err = r.Read() {
+ array = append( array, extractRecord( record ) )
+ }
+
+ if err != io.EOF && err != nil {
+ log.Fatal(err)
+ }
+
+ trans(array)
+
+ minArray := make([][]int, 0)
+
+ for row := range array {
+ if row == 0 {
+ minArray = append(minArray, array[0])
+ continue
+ }
+
+ minRow := make([]int, len(array[row]))
+
+ minRow[0] = minArray[row-1][0] + array[row][0]
+
+ // Un allez
+ for i := 1 ; i < len(minRow) ; i++ {
+ minRow[i] = min( minArray[row-1][i], minRow[i-1]) + array[row][i]
+ }
+
+ // Un retour !
+ for i:= len(minRow) - 2 ; i >= 0 ; i-- {
+ minRow[i] = min( minRow[i], minRow[i+1] + array[row][i] )
+ }
+
+ minArray = append(minArray, minRow)
+
+ }
+
+ // Ça c'est HYPER classe !
+ fmt.Println(min(minArray[len(minArray)-1]...))
+}
diff --git a/p83/p083_matrix.txt b/p83/p083_matrix.txt
new file mode 100644
index 0000000..f65322a
--- /dev/null
+++ b/p83/p083_matrix.txt
@@ -0,0 +1,80 @@
+4445,2697,5115,718,2209,2212,654,4348,3079,6821,7668,3276,8874,4190,3785,2752,9473,7817,9137,496,7338,3434,7152,4355,4552,7917,7827,2460,2350,691,3514,5880,3145,7633,7199,3783,5066,7487,3285,1084,8985,760,872,8609,8051,1134,9536,5750,9716,9371,7619,5617,275,9721,2997,2698,1887,8825,6372,3014,2113,7122,7050,6775,5948,2758,1219,3539,348,7989,2735,9862,1263,8089,6401,9462,3168,2758,3748,5870
+1096,20,1318,7586,5167,2642,1443,5741,7621,7030,5526,4244,2348,4641,9827,2448,6918,5883,3737,300,7116,6531,567,5997,3971,6623,820,6148,3287,1874,7981,8424,7672,7575,6797,6717,1078,5008,4051,8795,5820,346,1851,6463,2117,6058,3407,8211,117,4822,1317,4377,4434,5925,8341,4800,1175,4173,690,8978,7470,1295,3799,8724,3509,9849,618,3320,7068,9633,2384,7175,544,6583,1908,9983,481,4187,9353,9377
+9607,7385,521,6084,1364,8983,7623,1585,6935,8551,2574,8267,4781,3834,2764,2084,2669,4656,9343,7709,2203,9328,8004,6192,5856,3555,2260,5118,6504,1839,9227,1259,9451,1388,7909,5733,6968,8519,9973,1663,5315,7571,3035,4325,4283,2304,6438,3815,9213,9806,9536,196,5542,6907,2475,1159,5820,9075,9470,2179,9248,1828,4592,9167,3713,4640,47,3637,309,7344,6955,346,378,9044,8635,7466,5036,9515,6385,9230
+7206,3114,7760,1094,6150,5182,7358,7387,4497,955,101,1478,7777,6966,7010,8417,6453,4955,3496,107,449,8271,131,2948,6185,784,5937,8001,6104,8282,4165,3642,710,2390,575,715,3089,6964,4217,192,5949,7006,715,3328,1152,66,8044,4319,1735,146,4818,5456,6451,4113,1063,4781,6799,602,1504,6245,6550,1417,1343,2363,3785,5448,4545,9371,5420,5068,4613,4882,4241,5043,7873,8042,8434,3939,9256,2187
+3620,8024,577,9997,7377,7682,1314,1158,6282,6310,1896,2509,5436,1732,9480,706,496,101,6232,7375,2207,2306,110,6772,3433,2878,8140,5933,8688,1399,2210,7332,6172,6403,7333,4044,2291,1790,2446,7390,8698,5723,3678,7104,1825,2040,140,3982,4905,4160,2200,5041,2512,1488,2268,1175,7588,8321,8078,7312,977,5257,8465,5068,3453,3096,1651,7906,253,9250,6021,8791,8109,6651,3412,345,4778,5152,4883,7505
+1074,5438,9008,2679,5397,5429,2652,3403,770,9188,4248,2493,4361,8327,9587,707,9525,5913,93,1899,328,2876,3604,673,8576,6908,7659,2544,3359,3883,5273,6587,3065,1749,3223,604,9925,6941,2823,8767,7039,3290,3214,1787,7904,3421,7137,9560,8451,2669,9219,6332,1576,5477,6755,8348,4164,4307,2984,4012,6629,1044,2874,6541,4942,903,1404,9125,5160,8836,4345,2581,460,8438,1538,5507,668,3352,2678,6942
+4295,1176,5596,1521,3061,9868,7037,7129,8933,6659,5947,5063,3653,9447,9245,2679,767,714,116,8558,163,3927,8779,158,5093,2447,5782,3967,1716,931,7772,8164,1117,9244,5783,7776,3846,8862,6014,2330,6947,1777,3112,6008,3491,1906,5952,314,4602,8994,5919,9214,3995,5026,7688,6809,5003,3128,2509,7477,110,8971,3982,8539,2980,4689,6343,5411,2992,5270,5247,9260,2269,7474,1042,7162,5206,1232,4556,4757
+510,3556,5377,1406,5721,4946,2635,7847,4251,8293,8281,6351,4912,287,2870,3380,3948,5322,3840,4738,9563,1906,6298,3234,8959,1562,6297,8835,7861,239,6618,1322,2553,2213,5053,5446,4402,6500,5182,8585,6900,5756,9661,903,5186,7687,5998,7997,8081,8955,4835,6069,2621,1581,732,9564,1082,1853,5442,1342,520,1737,3703,5321,4793,2776,1508,1647,9101,2499,6891,4336,7012,3329,3212,1442,9993,3988,4930,7706
+9444,3401,5891,9716,1228,7107,109,3563,2700,6161,5039,4992,2242,8541,7372,2067,1294,3058,1306,320,8881,5756,9326,411,8650,8824,5495,8282,8397,2000,1228,7817,2099,6473,3571,5994,4447,1299,5991,543,7874,2297,1651,101,2093,3463,9189,6872,6118,872,1008,1779,2805,9084,4048,2123,5877,55,3075,1737,9459,4535,6453,3644,108,5982,4437,5213,1340,6967,9943,5815,669,8074,1838,6979,9132,9315,715,5048
+3327,4030,7177,6336,9933,5296,2621,4785,2755,4832,2512,2118,2244,4407,2170,499,7532,9742,5051,7687,970,6924,3527,4694,5145,1306,2165,5940,2425,8910,3513,1909,6983,346,6377,4304,9330,7203,6605,3709,3346,970,369,9737,5811,4427,9939,3693,8436,5566,1977,3728,2399,3985,8303,2492,5366,9802,9193,7296,1033,5060,9144,2766,1151,7629,5169,5995,58,7619,7565,4208,1713,6279,3209,4908,9224,7409,1325,8540
+6882,1265,1775,3648,4690,959,5837,4520,5394,1378,9485,1360,4018,578,9174,2932,9890,3696,116,1723,1178,9355,7063,1594,1918,8574,7594,7942,1547,6166,7888,354,6932,4651,1010,7759,6905,661,7689,6092,9292,3845,9605,8443,443,8275,5163,7720,7265,6356,7779,1798,1754,5225,6661,1180,8024,5666,88,9153,1840,3508,1193,4445,2648,3538,6243,6375,8107,5902,5423,2520,1122,5015,6113,8859,9370,966,8673,2442
+7338,3423,4723,6533,848,8041,7921,8277,4094,5368,7252,8852,9166,2250,2801,6125,8093,5738,4038,9808,7359,9494,601,9116,4946,2702,5573,2921,9862,1462,1269,2410,4171,2709,7508,6241,7522,615,2407,8200,4189,5492,5649,7353,2590,5203,4274,710,7329,9063,956,8371,3722,4253,4785,1194,4828,4717,4548,940,983,2575,4511,2938,1827,2027,2700,1236,841,5760,1680,6260,2373,3851,1841,4968,1172,5179,7175,3509
+4420,1327,3560,2376,6260,2988,9537,4064,4829,8872,9598,3228,1792,7118,9962,9336,4368,9189,6857,1829,9863,6287,7303,7769,2707,8257,2391,2009,3975,4993,3068,9835,3427,341,8412,2134,4034,8511,6421,3041,9012,2983,7289,100,1355,7904,9186,6920,5856,2008,6545,8331,3655,5011,839,8041,9255,6524,3862,8788,62,7455,3513,5003,8413,3918,2076,7960,6108,3638,6999,3436,1441,4858,4181,1866,8731,7745,3744,1000
+356,8296,8325,1058,1277,4743,3850,2388,6079,6462,2815,5620,8495,5378,75,4324,3441,9870,1113,165,1544,1179,2834,562,6176,2313,6836,8839,2986,9454,5199,6888,1927,5866,8760,320,1792,8296,7898,6121,7241,5886,5814,2815,8336,1576,4314,3109,2572,6011,2086,9061,9403,3947,5487,9731,7281,3159,1819,1334,3181,5844,5114,9898,4634,2531,4412,6430,4262,8482,4546,4555,6804,2607,9421,686,8649,8860,7794,6672
+9870,152,1558,4963,8750,4754,6521,6256,8818,5208,5691,9659,8377,9725,5050,5343,2539,6101,1844,9700,7750,8114,5357,3001,8830,4438,199,9545,8496,43,2078,327,9397,106,6090,8181,8646,6414,7499,5450,4850,6273,5014,4131,7639,3913,6571,8534,9703,4391,7618,445,1320,5,1894,6771,7383,9191,4708,9706,6939,7937,8726,9382,5216,3685,2247,9029,8154,1738,9984,2626,9438,4167,6351,5060,29,1218,1239,4785
+192,5213,8297,8974,4032,6966,5717,1179,6523,4679,9513,1481,3041,5355,9303,9154,1389,8702,6589,7818,6336,3539,5538,3094,6646,6702,6266,2759,4608,4452,617,9406,8064,6379,444,5602,4950,1810,8391,1536,316,8714,1178,5182,5863,5110,5372,4954,1978,2971,5680,4863,2255,4630,5723,2168,538,1692,1319,7540,440,6430,6266,7712,7385,5702,620,641,3136,7350,1478,3155,2820,9109,6261,1122,4470,14,8493,2095
+1046,4301,6082,474,4974,7822,2102,5161,5172,6946,8074,9716,6586,9962,9749,5015,2217,995,5388,4402,7652,6399,6539,1349,8101,3677,1328,9612,7922,2879,231,5887,2655,508,4357,4964,3554,5930,6236,7384,4614,280,3093,9600,2110,7863,2631,6626,6620,68,1311,7198,7561,1768,5139,1431,221,230,2940,968,5283,6517,2146,1646,869,9402,7068,8645,7058,1765,9690,4152,2926,9504,2939,7504,6074,2944,6470,7859
+4659,736,4951,9344,1927,6271,8837,8711,3241,6579,7660,5499,5616,3743,5801,4682,9748,8796,779,1833,4549,8138,4026,775,4170,2432,4174,3741,7540,8017,2833,4027,396,811,2871,1150,9809,2719,9199,8504,1224,540,2051,3519,7982,7367,2761,308,3358,6505,2050,4836,5090,7864,805,2566,2409,6876,3361,8622,5572,5895,3280,441,7893,8105,1634,2929,274,3926,7786,6123,8233,9921,2674,5340,1445,203,4585,3837
+5759,338,7444,7968,7742,3755,1591,4839,1705,650,7061,2461,9230,9391,9373,2413,1213,431,7801,4994,2380,2703,6161,6878,8331,2538,6093,1275,5065,5062,2839,582,1014,8109,3525,1544,1569,8622,7944,2905,6120,1564,1839,5570,7579,1318,2677,5257,4418,5601,7935,7656,5192,1864,5886,6083,5580,6202,8869,1636,7907,4759,9082,5854,3185,7631,6854,5872,5632,5280,1431,2077,9717,7431,4256,8261,9680,4487,4752,4286
+1571,1428,8599,1230,7772,4221,8523,9049,4042,8726,7567,6736,9033,2104,4879,4967,6334,6716,3994,1269,8995,6539,3610,7667,6560,6065,874,848,4597,1711,7161,4811,6734,5723,6356,6026,9183,2586,5636,1092,7779,7923,8747,6887,7505,9909,1792,3233,4526,3176,1508,8043,720,5212,6046,4988,709,5277,8256,3642,1391,5803,1468,2145,3970,6301,7767,2359,8487,9771,8785,7520,856,1605,8972,2402,2386,991,1383,5963
+1822,4824,5957,6511,9868,4113,301,9353,6228,2881,2966,6956,9124,9574,9233,1601,7340,973,9396,540,4747,8590,9535,3650,7333,7583,4806,3593,2738,8157,5215,8472,2284,9473,3906,6982,5505,6053,7936,6074,7179,6688,1564,1103,6860,5839,2022,8490,910,7551,7805,881,7024,1855,9448,4790,1274,3672,2810,774,7623,4223,4850,6071,9975,4935,1915,9771,6690,3846,517,463,7624,4511,614,6394,3661,7409,1395,8127
+8738,3850,9555,3695,4383,2378,87,6256,6740,7682,9546,4255,6105,2000,1851,4073,8957,9022,6547,5189,2487,303,9602,7833,1628,4163,6678,3144,8589,7096,8913,5823,4890,7679,1212,9294,5884,2972,3012,3359,7794,7428,1579,4350,7246,4301,7779,7790,3294,9547,4367,3549,1958,8237,6758,3497,3250,3456,6318,1663,708,7714,6143,6890,3428,6853,9334,7992,591,6449,9786,1412,8500,722,5468,1371,108,3939,4199,2535
+7047,4323,1934,5163,4166,461,3544,2767,6554,203,6098,2265,9078,2075,4644,6641,8412,9183,487,101,7566,5622,1975,5726,2920,5374,7779,5631,3753,3725,2672,3621,4280,1162,5812,345,8173,9785,1525,955,5603,2215,2580,5261,2765,2990,5979,389,3907,2484,1232,5933,5871,3304,1138,1616,5114,9199,5072,7442,7245,6472,4760,6359,9053,7876,2564,9404,3043,9026,2261,3374,4460,7306,2326,966,828,3274,1712,3446
+3975,4565,8131,5800,4570,2306,8838,4392,9147,11,3911,7118,9645,4994,2028,6062,5431,2279,8752,2658,7836,994,7316,5336,7185,3289,1898,9689,2331,5737,3403,1124,2679,3241,7748,16,2724,5441,6640,9368,9081,5618,858,4969,17,2103,6035,8043,7475,2181,939,415,1617,8500,8253,2155,7843,7974,7859,1746,6336,3193,2617,8736,4079,6324,6645,8891,9396,5522,6103,1857,8979,3835,2475,1310,7422,610,8345,7615
+9248,5397,5686,2988,3446,4359,6634,9141,497,9176,6773,7448,1907,8454,916,1596,2241,1626,1384,2741,3649,5362,8791,7170,2903,2475,5325,6451,924,3328,522,90,4813,9737,9557,691,2388,1383,4021,1609,9206,4707,5200,7107,8104,4333,9860,5013,1224,6959,8527,1877,4545,7772,6268,621,4915,9349,5970,706,9583,3071,4127,780,8231,3017,9114,3836,7503,2383,1977,4870,8035,2379,9704,1037,3992,3642,1016,4303
+5093,138,4639,6609,1146,5565,95,7521,9077,2272,974,4388,2465,2650,722,4998,3567,3047,921,2736,7855,173,2065,4238,1048,5,6847,9548,8632,9194,5942,4777,7910,8971,6279,7253,2516,1555,1833,3184,9453,9053,6897,7808,8629,4877,1871,8055,4881,7639,1537,7701,2508,7564,5845,5023,2304,5396,3193,2955,1088,3801,6203,1748,3737,1276,13,4120,7715,8552,3047,2921,106,7508,304,1280,7140,2567,9135,5266
+6237,4607,7527,9047,522,7371,4883,2540,5867,6366,5301,1570,421,276,3361,527,6637,4861,2401,7522,5808,9371,5298,2045,5096,5447,7755,5115,7060,8529,4078,1943,1697,1764,5453,7085,960,2405,739,2100,5800,728,9737,5704,5693,1431,8979,6428,673,7540,6,7773,5857,6823,150,5869,8486,684,5816,9626,7451,5579,8260,3397,5322,6920,1879,2127,2884,5478,4977,9016,6165,6292,3062,5671,5968,78,4619,4763
+9905,7127,9390,5185,6923,3721,9164,9705,4341,1031,1046,5127,7376,6528,3248,4941,1178,7889,3364,4486,5358,9402,9158,8600,1025,874,1839,1783,309,9030,1843,845,8398,1433,7118,70,8071,2877,3904,8866,6722,4299,10,1929,5897,4188,600,1889,3325,2485,6473,4474,7444,6992,4846,6166,4441,2283,2629,4352,7775,1101,2214,9985,215,8270,9750,2740,8361,7103,5930,8664,9690,8302,9267,344,2077,1372,1880,9550
+5825,8517,7769,2405,8204,1060,3603,7025,478,8334,1997,3692,7433,9101,7294,7498,9415,5452,3850,3508,6857,9213,6807,4412,7310,854,5384,686,4978,892,8651,3241,2743,3801,3813,8588,6701,4416,6990,6490,3197,6838,6503,114,8343,5844,8646,8694,65,791,5979,2687,2621,2019,8097,1423,3644,9764,4921,3266,3662,5561,2476,8271,8138,6147,1168,3340,1998,9874,6572,9873,6659,5609,2711,3931,9567,4143,7833,8887
+6223,2099,2700,589,4716,8333,1362,5007,2753,2848,4441,8397,7192,8191,4916,9955,6076,3370,6396,6971,3156,248,3911,2488,4930,2458,7183,5455,170,6809,6417,3390,1956,7188,577,7526,2203,968,8164,479,8699,7915,507,6393,4632,1597,7534,3604,618,3280,6061,9793,9238,8347,568,9645,2070,5198,6482,5000,9212,6655,5961,7513,1323,3872,6170,3812,4146,2736,67,3151,5548,2781,9679,7564,5043,8587,1893,4531
+5826,3690,6724,2121,9308,6986,8106,6659,2142,1642,7170,2877,5757,6494,8026,6571,8387,9961,6043,9758,9607,6450,8631,8334,7359,5256,8523,2225,7487,1977,9555,8048,5763,2414,4948,4265,2427,8978,8088,8841,9208,9601,5810,9398,8866,9138,4176,5875,7212,3272,6759,5678,7649,4922,5422,1343,8197,3154,3600,687,1028,4579,2084,9467,4492,7262,7296,6538,7657,7134,2077,1505,7332,6890,8964,4879,7603,7400,5973,739
+1861,1613,4879,1884,7334,966,2000,7489,2123,4287,1472,3263,4726,9203,1040,4103,6075,6049,330,9253,4062,4268,1635,9960,577,1320,3195,9628,1030,4092,4979,6474,6393,2799,6967,8687,7724,7392,9927,2085,3200,6466,8702,265,7646,8665,7986,7266,4574,6587,612,2724,704,3191,8323,9523,3002,704,5064,3960,8209,2027,2758,8393,4875,4641,9584,6401,7883,7014,768,443,5490,7506,1852,2005,8850,5776,4487,4269
+4052,6687,4705,7260,6645,6715,3706,5504,8672,2853,1136,8187,8203,4016,871,1809,1366,4952,9294,5339,6872,2645,6083,7874,3056,5218,7485,8796,7401,3348,2103,426,8572,4163,9171,3176,948,7654,9344,3217,1650,5580,7971,2622,76,2874,880,2034,9929,1546,2659,5811,3754,7096,7436,9694,9960,7415,2164,953,2360,4194,2397,1047,2196,6827,575,784,2675,8821,6802,7972,5996,6699,2134,7577,2887,1412,4349,4380
+4629,2234,6240,8132,7592,3181,6389,1214,266,1910,2451,8784,2790,1127,6932,1447,8986,2492,5476,397,889,3027,7641,5083,5776,4022,185,3364,5701,2442,2840,4160,9525,4828,6602,2614,7447,3711,4505,7745,8034,6514,4907,2605,7753,6958,7270,6936,3006,8968,439,2326,4652,3085,3425,9863,5049,5361,8688,297,7580,8777,7916,6687,8683,7141,306,9569,2384,1500,3346,4601,7329,9040,6097,2727,6314,4501,4974,2829
+8316,4072,2025,6884,3027,1808,5714,7624,7880,8528,4205,8686,7587,3230,1139,7273,6163,6986,3914,9309,1464,9359,4474,7095,2212,7302,2583,9462,7532,6567,1606,4436,8981,5612,6796,4385,5076,2007,6072,3678,8331,1338,3299,8845,4783,8613,4071,1232,6028,2176,3990,2148,3748,103,9453,538,6745,9110,926,3125,473,5970,8728,7072,9062,1404,1317,5139,9862,6496,6062,3338,464,1600,2532,1088,8232,7739,8274,3873
+2341,523,7096,8397,8301,6541,9844,244,4993,2280,7689,4025,4196,5522,7904,6048,2623,9258,2149,9461,6448,8087,7245,1917,8340,7127,8466,5725,6996,3421,5313,512,9164,9837,9794,8369,4185,1488,7210,1524,1016,4620,9435,2478,7765,8035,697,6677,3724,6988,5853,7662,3895,9593,1185,4727,6025,5734,7665,3070,138,8469,6748,6459,561,7935,8646,2378,462,7755,3115,9690,8877,3946,2728,8793,244,6323,8666,4271
+6430,2406,8994,56,1267,3826,9443,7079,7579,5232,6691,3435,6718,5698,4144,7028,592,2627,217,734,6194,8156,9118,58,2640,8069,4127,3285,694,3197,3377,4143,4802,3324,8134,6953,7625,3598,3584,4289,7065,3434,2106,7132,5802,7920,9060,7531,3321,1725,1067,3751,444,5503,6785,7937,6365,4803,198,6266,8177,1470,6390,1606,2904,7555,9834,8667,2033,1723,5167,1666,8546,8152,473,4475,6451,7947,3062,3281
+2810,3042,7759,1741,2275,2609,7676,8640,4117,1958,7500,8048,1757,3954,9270,1971,4796,2912,660,5511,3553,1012,5757,4525,6084,7198,8352,5775,7726,8591,7710,9589,3122,4392,6856,5016,749,2285,3356,7482,9956,7348,2599,8944,495,3462,3578,551,4543,7207,7169,7796,1247,4278,6916,8176,3742,8385,2310,1345,8692,2667,4568,1770,8319,3585,4920,3890,4928,7343,5385,9772,7947,8786,2056,9266,3454,2807,877,2660
+6206,8252,5928,5837,4177,4333,207,7934,5581,9526,8906,1498,8411,2984,5198,5134,2464,8435,8514,8674,3876,599,5327,826,2152,4084,2433,9327,9697,4800,2728,3608,3849,3861,3498,9943,1407,3991,7191,9110,5666,8434,4704,6545,5944,2357,1163,4995,9619,6754,4200,9682,6654,4862,4744,5953,6632,1054,293,9439,8286,2255,696,8709,1533,1844,6441,430,1999,6063,9431,7018,8057,2920,6266,6799,356,3597,4024,6665
+3847,6356,8541,7225,2325,2946,5199,469,5450,7508,2197,9915,8284,7983,6341,3276,3321,16,1321,7608,5015,3362,8491,6968,6818,797,156,2575,706,9516,5344,5457,9210,5051,8099,1617,9951,7663,8253,9683,2670,1261,4710,1068,8753,4799,1228,2621,3275,6188,4699,1791,9518,8701,5932,4275,6011,9877,2933,4182,6059,2930,6687,6682,9771,654,9437,3169,8596,1827,5471,8909,2352,123,4394,3208,8756,5513,6917,2056
+5458,8173,3138,3290,4570,4892,3317,4251,9699,7973,1163,1935,5477,6648,9614,5655,9592,975,9118,2194,7322,8248,8413,3462,8560,1907,7810,6650,7355,2939,4973,6894,3933,3784,3200,2419,9234,4747,2208,2207,1945,2899,1407,6145,8023,3484,5688,7686,2737,3828,3704,9004,5190,9740,8643,8650,5358,4426,1522,1707,3613,9887,6956,2447,2762,833,1449,9489,2573,1080,4167,3456,6809,2466,227,7125,2759,6250,6472,8089
+3266,7025,9756,3914,1265,9116,7723,9788,6805,5493,2092,8688,6592,9173,4431,4028,6007,7131,4446,4815,3648,6701,759,3312,8355,4485,4187,5188,8746,7759,3528,2177,5243,8379,3838,7233,4607,9187,7216,2190,6967,2920,6082,7910,5354,3609,8958,6949,7731,494,8753,8707,1523,4426,3543,7085,647,6771,9847,646,5049,824,8417,5260,2730,5702,2513,9275,4279,2767,8684,1165,9903,4518,55,9682,8963,6005,2102,6523
+1998,8731,936,1479,5259,7064,4085,91,7745,7136,3773,3810,730,8255,2705,2653,9790,6807,2342,355,9344,2668,3690,2028,9679,8102,574,4318,6481,9175,5423,8062,2867,9657,7553,3442,3920,7430,3945,7639,3714,3392,2525,4995,4850,2867,7951,9667,486,9506,9888,781,8866,1702,3795,90,356,1483,4200,2131,6969,5931,486,6880,4404,1084,5169,4910,6567,8335,4686,5043,2614,3352,2667,4513,6472,7471,5720,1616
+8878,1613,1716,868,1906,2681,564,665,5995,2474,7496,3432,9491,9087,8850,8287,669,823,347,6194,2264,2592,7871,7616,8508,4827,760,2676,4660,4881,7572,3811,9032,939,4384,929,7525,8419,5556,9063,662,8887,7026,8534,3111,1454,2082,7598,5726,6687,9647,7608,73,3014,5063,670,5461,5631,3367,9796,8475,7908,5073,1565,5008,5295,4457,1274,4788,1728,338,600,8415,8535,9351,7750,6887,5845,1741,125
+3637,6489,9634,9464,9055,2413,7824,9517,7532,3577,7050,6186,6980,9365,9782,191,870,2497,8498,2218,2757,5420,6468,586,3320,9230,1034,1393,9886,5072,9391,1178,8464,8042,6869,2075,8275,3601,7715,9470,8786,6475,8373,2159,9237,2066,3264,5000,679,355,3069,4073,494,2308,5512,4334,9438,8786,8637,9774,1169,1949,6594,6072,4270,9158,7916,5752,6794,9391,6301,5842,3285,2141,3898,8027,4310,8821,7079,1307
+8497,6681,4732,7151,7060,5204,9030,7157,833,5014,8723,3207,9796,9286,4913,119,5118,7650,9335,809,3675,2597,5144,3945,5090,8384,187,4102,1260,2445,2792,4422,8389,9290,50,1765,1521,6921,8586,4368,1565,5727,7855,2003,4834,9897,5911,8630,5070,1330,7692,7557,7980,6028,5805,9090,8265,3019,3802,698,9149,5748,1965,9658,4417,5994,5584,8226,2937,272,5743,1278,5698,8736,2595,6475,5342,6596,1149,6920
+8188,8009,9546,6310,8772,2500,9846,6592,6872,3857,1307,8125,7042,1544,6159,2330,643,4604,7899,6848,371,8067,2062,3200,7295,1857,9505,6936,384,2193,2190,301,8535,5503,1462,7380,5114,4824,8833,1763,4974,8711,9262,6698,3999,2645,6937,7747,1128,2933,3556,7943,2885,3122,9105,5447,418,2899,5148,3699,9021,9501,597,4084,175,1621,1,1079,6067,5812,4326,9914,6633,5394,4233,6728,9084,1864,5863,1225
+9935,8793,9117,1825,9542,8246,8437,3331,9128,9675,6086,7075,319,1334,7932,3583,7167,4178,1726,7720,695,8277,7887,6359,5912,1719,2780,8529,1359,2013,4498,8072,1129,9998,1147,8804,9405,6255,1619,2165,7491,1,8882,7378,3337,503,5758,4109,3577,985,3200,7615,8058,5032,1080,6410,6873,5496,1466,2412,9885,5904,4406,3605,8770,4361,6205,9193,1537,9959,214,7260,9566,1685,100,4920,7138,9819,5637,976
+3466,9854,985,1078,7222,8888,5466,5379,3578,4540,6853,8690,3728,6351,7147,3134,6921,9692,857,3307,4998,2172,5783,3931,9417,2541,6299,13,787,2099,9131,9494,896,8600,1643,8419,7248,2660,2609,8579,91,6663,5506,7675,1947,6165,4286,1972,9645,3805,1663,1456,8853,5705,9889,7489,1107,383,4044,2969,3343,152,7805,4980,9929,5033,1737,9953,7197,9158,4071,1324,473,9676,3984,9680,3606,8160,7384,5432
+1005,4512,5186,3953,2164,3372,4097,3247,8697,3022,9896,4101,3871,6791,3219,2742,4630,6967,7829,5991,6134,1197,1414,8923,8787,1394,8852,5019,7768,5147,8004,8825,5062,9625,7988,1110,3992,7984,9966,6516,6251,8270,421,3723,1432,4830,6935,8095,9059,2214,6483,6846,3120,1587,6201,6691,9096,9627,6671,4002,3495,9939,7708,7465,5879,6959,6634,3241,3401,2355,9061,2611,7830,3941,2177,2146,5089,7079,519,6351
+7280,8586,4261,2831,7217,3141,9994,9940,5462,2189,4005,6942,9848,5350,8060,6665,7519,4324,7684,657,9453,9296,2944,6843,7499,7847,1728,9681,3906,6353,5529,2822,3355,3897,7724,4257,7489,8672,4356,3983,1948,6892,7415,4153,5893,4190,621,1736,4045,9532,7701,3671,1211,1622,3176,4524,9317,7800,5638,6644,6943,5463,3531,2821,1347,5958,3436,1438,2999,994,850,4131,2616,1549,3465,5946,690,9273,6954,7991
+9517,399,3249,2596,7736,2142,1322,968,7350,1614,468,3346,3265,7222,6086,1661,5317,2582,7959,4685,2807,2917,1037,5698,1529,3972,8716,2634,3301,3412,8621,743,8001,4734,888,7744,8092,3671,8941,1487,5658,7099,2781,99,1932,4443,4756,4652,9328,1581,7855,4312,5976,7255,6480,3996,2748,1973,9731,4530,2790,9417,7186,5303,3557,351,7182,9428,1342,9020,7599,1392,8304,2070,9138,7215,2008,9937,1106,7110
+7444,769,9688,632,1571,6820,8743,4338,337,3366,3073,1946,8219,104,4210,6986,249,5061,8693,7960,6546,1004,8857,5997,9352,4338,6105,5008,2556,6518,6694,4345,3727,7956,20,3954,8652,4424,9387,2035,8358,5962,5304,5194,8650,8282,1256,1103,2138,6679,1985,3653,2770,2433,4278,615,2863,1715,242,3790,2636,6998,3088,1671,2239,957,5411,4595,6282,2881,9974,2401,875,7574,2987,4587,3147,6766,9885,2965
+3287,3016,3619,6818,9073,6120,5423,557,2900,2015,8111,3873,1314,4189,1846,4399,7041,7583,2427,2864,3525,5002,2069,748,1948,6015,2684,438,770,8367,1663,7887,7759,1885,157,7770,4520,4878,3857,1137,3525,3050,6276,5569,7649,904,4533,7843,2199,5648,7628,9075,9441,3600,7231,2388,5640,9096,958,3058,584,5899,8150,1181,9616,1098,8162,6819,8171,1519,1140,7665,8801,2632,1299,9192,707,9955,2710,7314
+1772,2963,7578,3541,3095,1488,7026,2634,6015,4633,4370,2762,1650,2174,909,8158,2922,8467,4198,4280,9092,8856,8835,5457,2790,8574,9742,5054,9547,4156,7940,8126,9824,7340,8840,6574,3547,1477,3014,6798,7134,435,9484,9859,3031,4,1502,4133,1738,1807,4825,463,6343,9701,8506,9822,9555,8688,8168,3467,3234,6318,1787,5591,419,6593,7974,8486,9861,6381,6758,194,3061,4315,2863,4665,3789,2201,1492,4416
+126,8927,6608,5682,8986,6867,1715,6076,3159,788,3140,4744,830,9253,5812,5021,7616,8534,1546,9590,1101,9012,9821,8132,7857,4086,1069,7491,2988,1579,2442,4321,2149,7642,6108,250,6086,3167,24,9528,7663,2685,1220,9196,1397,5776,1577,1730,5481,977,6115,199,6326,2183,3767,5928,5586,7561,663,8649,9688,949,5913,9160,1870,5764,9887,4477,6703,1413,4995,5494,7131,2192,8969,7138,3997,8697,646,1028
+8074,1731,8245,624,4601,8706,155,8891,309,2552,8208,8452,2954,3124,3469,4246,3352,1105,4509,8677,9901,4416,8191,9283,5625,7120,2952,8881,7693,830,4580,8228,9459,8611,4499,1179,4988,1394,550,2336,6089,6872,269,7213,1848,917,6672,4890,656,1478,6536,3165,4743,4990,1176,6211,7207,5284,9730,4738,1549,4986,4942,8645,3698,9429,1439,2175,6549,3058,6513,1574,6988,8333,3406,5245,5431,7140,7085,6407
+7845,4694,2530,8249,290,5948,5509,1588,5940,4495,5866,5021,4626,3979,3296,7589,4854,1998,5627,3926,8346,6512,9608,1918,7070,4747,4182,2858,2766,4606,6269,4107,8982,8568,9053,4244,5604,102,2756,727,5887,2566,7922,44,5986,621,1202,374,6988,4130,3627,6744,9443,4568,1398,8679,397,3928,9159,367,2917,6127,5788,3304,8129,911,2669,1463,9749,264,4478,8940,1109,7309,2462,117,4692,7724,225,2312
+4164,3637,2000,941,8903,39,3443,7172,1031,3687,4901,8082,4945,4515,7204,9310,9349,9535,9940,218,1788,9245,2237,1541,5670,6538,6047,5553,9807,8101,1925,8714,445,8332,7309,6830,5786,5736,7306,2710,3034,1838,7969,6318,7912,2584,2080,7437,6705,2254,7428,820,782,9861,7596,3842,3631,8063,5240,6666,394,4565,7865,4895,9890,6028,6117,4724,9156,4473,4552,602,470,6191,4927,5387,884,3146,1978,3000
+4258,6880,1696,3582,5793,4923,2119,1155,9056,9698,6603,3768,5514,9927,9609,6166,6566,4536,4985,4934,8076,9062,6741,6163,7399,4562,2337,5600,2919,9012,8459,1308,6072,1225,9306,8818,5886,7243,7365,8792,6007,9256,6699,7171,4230,7002,8720,7839,4533,1671,478,7774,1607,2317,5437,4705,7886,4760,6760,7271,3081,2997,3088,7675,6208,3101,6821,6840,122,9633,4900,2067,8546,4549,2091,7188,5605,8599,6758,5229
+7854,5243,9155,3556,8812,7047,2202,1541,5993,4600,4760,713,434,7911,7426,7414,8729,322,803,7960,7563,4908,6285,6291,736,3389,9339,4132,8701,7534,5287,3646,592,3065,7582,2592,8755,6068,8597,1982,5782,1894,2900,6236,4039,6569,3037,5837,7698,700,7815,2491,7272,5878,3083,6778,6639,3589,5010,8313,2581,6617,5869,8402,6808,2951,2321,5195,497,2190,6187,1342,1316,4453,7740,4154,2959,1781,1482,8256
+7178,2046,4419,744,8312,5356,6855,8839,319,2962,5662,47,6307,8662,68,4813,567,2712,9931,1678,3101,8227,6533,4933,6656,92,5846,4780,6256,6361,4323,9985,1231,2175,7178,3034,9744,6155,9165,7787,5836,9318,7860,9644,8941,6480,9443,8188,5928,161,6979,2352,5628,6991,1198,8067,5867,6620,3778,8426,2994,3122,3124,6335,3918,8897,2655,9670,634,1088,1576,8935,7255,474,8166,7417,9547,2886,5560,3842
+6957,3111,26,7530,7143,1295,1744,6057,3009,1854,8098,5405,2234,4874,9447,2620,9303,27,7410,969,40,2966,5648,7596,8637,4238,3143,3679,7187,690,9980,7085,7714,9373,5632,7526,6707,3951,9734,4216,2146,3602,5371,6029,3039,4433,4855,4151,1449,3376,8009,7240,7027,4602,2947,9081,4045,8424,9352,8742,923,2705,4266,3232,2264,6761,363,2651,3383,7770,6730,7856,7340,9679,2158,610,4471,4608,910,6241
+4417,6756,1013,8797,658,8809,5032,8703,7541,846,3357,2920,9817,1745,9980,7593,4667,3087,779,3218,6233,5568,4296,2289,2654,7898,5021,9461,5593,8214,9173,4203,2271,7980,2983,5952,9992,8399,3468,1776,3188,9314,1720,6523,2933,621,8685,5483,8986,6163,3444,9539,4320,155,3992,2828,2150,6071,524,2895,5468,8063,1210,3348,9071,4862,483,9017,4097,6186,9815,3610,5048,1644,1003,9865,9332,2145,1944,2213
+9284,3803,4920,1927,6706,4344,7383,4786,9890,2010,5228,1224,3158,6967,8580,8990,8883,5213,76,8306,2031,4980,5639,9519,7184,5645,7769,3259,8077,9130,1317,3096,9624,3818,1770,695,2454,947,6029,3474,9938,3527,5696,4760,7724,7738,2848,6442,5767,6845,8323,4131,2859,7595,2500,4815,3660,9130,8580,7016,8231,4391,8369,3444,4069,4021,556,6154,627,2778,1496,4206,6356,8434,8491,3816,8231,3190,5575,1015
+3787,7572,1788,6803,5641,6844,1961,4811,8535,9914,9999,1450,8857,738,4662,8569,6679,2225,7839,8618,286,2648,5342,2294,3205,4546,176,8705,3741,6134,8324,8021,7004,5205,7032,6637,9442,5539,5584,4819,5874,5807,8589,6871,9016,983,1758,3786,1519,6241,185,8398,495,3370,9133,3051,4549,9674,7311,9738,3316,9383,2658,2776,9481,7558,619,3943,3324,6491,4933,153,9738,4623,912,3595,7771,7939,1219,4405
+2650,3883,4154,5809,315,7756,4430,1788,4451,1631,6461,7230,6017,5751,138,588,5282,2442,9110,9035,6349,2515,1570,6122,4192,4174,3530,1933,4186,4420,4609,5739,4135,2963,6308,1161,8809,8619,2796,3819,6971,8228,4188,1492,909,8048,2328,6772,8467,7671,9068,2226,7579,6422,7056,8042,3296,2272,3006,2196,7320,3238,3490,3102,37,1293,3212,4767,5041,8773,5794,4456,6174,7279,7054,2835,7053,9088,790,6640
+3101,1057,7057,3826,6077,1025,2955,1224,1114,6729,5902,4698,6239,7203,9423,1804,4417,6686,1426,6941,8071,1029,4985,9010,6122,6597,1622,1574,3513,1684,7086,5505,3244,411,9638,4150,907,9135,829,981,1707,5359,8781,9751,5,9131,3973,7159,1340,6955,7514,7993,6964,8198,1933,2797,877,3993,4453,8020,9349,8646,2779,8679,2961,3547,3374,3510,1129,3568,2241,2625,9138,5974,8206,7669,7678,1833,8700,4480
+4865,9912,8038,8238,782,3095,8199,1127,4501,7280,2112,2487,3626,2790,9432,1475,6312,8277,4827,2218,5806,7132,8752,1468,7471,6386,739,8762,8323,8120,5169,9078,9058,3370,9560,7987,8585,8531,5347,9312,1058,4271,1159,5286,5404,6925,8606,9204,7361,2415,560,586,4002,2644,1927,2824,768,4409,2942,3345,1002,808,4941,6267,7979,5140,8643,7553,9438,7320,4938,2666,4609,2778,8158,6730,3748,3867,1866,7181
+171,3771,7134,8927,4778,2913,3326,2004,3089,7853,1378,1729,4777,2706,9578,1360,5693,3036,1851,7248,2403,2273,8536,6501,9216,613,9671,7131,7719,6425,773,717,8803,160,1114,7554,7197,753,4513,4322,8499,4533,2609,4226,8710,6627,644,9666,6260,4870,5744,7385,6542,6203,7703,6130,8944,5589,2262,6803,6381,7414,6888,5123,7320,9392,9061,6780,322,8975,7050,5089,1061,2260,3199,1150,1865,5386,9699,6501
+3744,8454,6885,8277,919,1923,4001,6864,7854,5519,2491,6057,8794,9645,1776,5714,9786,9281,7538,6916,3215,395,2501,9618,4835,8846,9708,2813,3303,1794,8309,7176,2206,1602,1838,236,4593,2245,8993,4017,10,8215,6921,5206,4023,5932,6997,7801,262,7640,3107,8275,4938,7822,2425,3223,3886,2105,8700,9526,2088,8662,8034,7004,5710,2124,7164,3574,6630,9980,4242,2901,9471,1491,2117,4562,1130,9086,4117,6698
+2810,2280,2331,1170,4554,4071,8387,1215,2274,9848,6738,1604,7281,8805,439,1298,8318,7834,9426,8603,6092,7944,1309,8828,303,3157,4638,4439,9175,1921,4695,7716,1494,1015,1772,5913,1127,1952,1950,8905,4064,9890,385,9357,7945,5035,7082,5369,4093,6546,5187,5637,2041,8946,1758,7111,6566,1027,1049,5148,7224,7248,296,6169,375,1656,7993,2816,3717,4279,4675,1609,3317,42,6201,3100,3144,163,9530,4531
+7096,6070,1009,4988,3538,5801,7149,3063,2324,2912,7911,7002,4338,7880,2481,7368,3516,2016,7556,2193,1388,3865,8125,4637,4096,8114,750,3144,1938,7002,9343,4095,1392,4220,3455,6969,9647,1321,9048,1996,1640,6626,1788,314,9578,6630,2813,6626,4981,9908,7024,4355,3201,3521,3864,3303,464,1923,595,9801,3391,8366,8084,9374,1041,8807,9085,1892,9431,8317,9016,9221,8574,9981,9240,5395,2009,6310,2854,9255
+8830,3145,2960,9615,8220,6061,3452,2918,6481,9278,2297,3385,6565,7066,7316,5682,107,7646,4466,68,1952,9603,8615,54,7191,791,6833,2560,693,9733,4168,570,9127,9537,1925,8287,5508,4297,8452,8795,6213,7994,2420,4208,524,5915,8602,8330,2651,8547,6156,1812,6271,7991,9407,9804,1553,6866,1128,2119,4691,9711,8315,5879,9935,6900,482,682,4126,1041,428,6247,3720,5882,7526,2582,4327,7725,3503,2631
+2738,9323,721,7434,1453,6294,2957,3786,5722,6019,8685,4386,3066,9057,6860,499,5315,3045,5194,7111,3137,9104,941,586,3066,755,4177,8819,7040,5309,3583,3897,4428,7788,4721,7249,6559,7324,825,7311,3760,6064,6070,9672,4882,584,1365,9739,9331,5783,2624,7889,1604,1303,1555,7125,8312,425,8936,3233,7724,1480,403,7440,1784,1754,4721,1569,652,3893,4574,5692,9730,4813,9844,8291,9199,7101,3391,8914
+6044,2928,9332,3328,8588,447,3830,1176,3523,2705,8365,6136,5442,9049,5526,8575,8869,9031,7280,706,2794,8814,5767,4241,7696,78,6570,556,5083,1426,4502,3336,9518,2292,1885,3740,3153,9348,9331,8051,2759,5407,9028,7840,9255,831,515,2612,9747,7435,8964,4971,2048,4900,5967,8271,1719,9670,2810,6777,1594,6367,6259,8316,3815,1689,6840,9437,4361,822,9619,3065,83,6344,7486,8657,8228,9635,6932,4864
+8478,4777,6334,4678,7476,4963,6735,3096,5860,1405,5127,7269,7793,4738,227,9168,2996,8928,765,733,1276,7677,6258,1528,9558,3329,302,8901,1422,8277,6340,645,9125,8869,5952,141,8141,1816,9635,4025,4184,3093,83,2344,2747,9352,7966,1206,1126,1826,218,7939,2957,2729,810,8752,5247,4174,4038,8884,7899,9567,301,5265,5752,7524,4381,1669,3106,8270,6228,6373,754,2547,4240,2313,5514,3022,1040,9738
+2265,8192,1763,1369,8469,8789,4836,52,1212,6690,5257,8918,6723,6319,378,4039,2421,8555,8184,9577,1432,7139,8078,5452,9628,7579,4161,7490,5159,8559,1011,81,478,5840,1964,1334,6875,8670,9900,739,1514,8692,522,9316,6955,1345,8132,2277,3193,9773,3923,4177,2183,1236,6747,6575,4874,6003,6409,8187,745,8776,9440,7543,9825,2582,7381,8147,7236,5185,7564,6125,218,7991,6394,391,7659,7456,5128,5294
+2132,8992,8160,5782,4420,3371,3798,5054,552,5631,7546,4716,1332,6486,7892,7441,4370,6231,4579,2121,8615,1145,9391,1524,1385,2400,9437,2454,7896,7467,2928,8400,3299,4025,7458,4703,7206,6358,792,6200,725,4275,4136,7390,5984,4502,7929,5085,8176,4600,119,3568,76,9363,6943,2248,9077,9731,6213,5817,6729,4190,3092,6910,759,2682,8380,1254,9604,3011,9291,5329,9453,9746,2739,6522,3765,5634,1113,5789
+5304,5499,564,2801,679,2653,1783,3608,7359,7797,3284,796,3222,437,7185,6135,8571,2778,7488,5746,678,6140,861,7750,803,9859,9918,2425,3734,2698,9005,4864,9818,6743,2475,132,9486,3825,5472,919,292,4411,7213,7699,6435,9019,6769,1388,802,2124,1345,8493,9487,8558,7061,8777,8833,2427,2238,5409,4957,8503,3171,7622,5779,6145,2417,5873,5563,5693,9574,9491,1937,7384,4563,6842,5432,2751,3406,7981
diff --git a/p83/p83.go b/p83/p83.go
new file mode 100644
index 0000000..fa0b5ec
--- /dev/null
+++ b/p83/p83.go
@@ -0,0 +1,244 @@
+package main
+
+import (
+ "encoding/csv"
+ "fmt"
+ "os"
+ "log"
+ "strconv"
+ "strings"
+ "errors"
+)
+
+type Edge struct {
+ dst, value int
+}
+
+type Node struct {
+ edges []Edge
+ id int
+ value int
+}
+
+type DijkstraNode struct {
+ node *Node // A pointor to the node
+ dist int // Dist to that node
+ path []int // Node's id list
+}
+
+type DijkstraPQueue struct {
+ array []DijkstraNode
+ ref []int
+}
+
+func (q *DijkstraPQueue) isEmpty() bool {
+ return q.array == nil || len(q.array) < 2
+}
+
+func (q *DijkstraPQueue) push( n DijkstraNode) {
+ if q.array == nil {
+ q.array = make([]DijkstraNode, 1)
+ }
+ q.array = append(q.array, n)
+ q.ref[n.node.id] = len(q.array) - 1
+
+ for i := len(q.array) - 1 ; i > 1 ; i = i >> 1 {
+ if q.array[i].dist < q.array[i>>1].dist {
+ q.array[i], q.array[i>>1] = q.array[i>>1], q.array[i]
+ q.ref[q.array[i].node.id], q.ref[q.array[i>>1].node.id] = i, i>>1
+ } else {
+ break
+ }
+ }
+
+ return
+}
+
+func (q *DijkstraPQueue) pop() (DijkstraNode, error) {
+ if q.isEmpty() {
+ return DijkstraNode{}, errors.New("PQeueue empty")
+ }
+
+ // The node to return, it's the root of the tree
+ v := q.array[1]
+ q.ref[v.node.id] = -2
+
+ // We overwrite him by the last node
+ q.array[1] = q.array[len(q.array)-1]
+ q.ref[q.array[1].node.id] = 1
+
+ q.array = q.array[:len(q.array)-1]
+
+
+ ind := 2
+ for i := 1 ; i*2 < len(q.array) ; i = ind {
+ // Choose if we should deal with the Right or the Left next node.
+ // Select the lower
+ if i << 1 + 1 < len(q.array) {
+ if q.array[i<<1+1].dist < q.array[i<<1].dist {
+ ind = i<<1+1
+ } else {
+ ind = i<<1
+ }
+ }
+
+ // And then we deal with that node.
+ if q.array[ind].dist < q.array[i].dist {
+ q.array[ind], q.array[i] = q.array[i], q.array[ind]
+ q.ref[q.array[ind].node.id], q.ref[q.array[i].node.id] = ind, i
+ } else {
+ break
+ }
+ }
+
+ return v,nil
+}
+
+func (q *DijkstraPQueue) update( idNode, dist int, path []int ) {
+ // We find the node
+ // It the only purpose of the ref array. So sad.
+ id := q.ref[idNode]
+
+ if id == -2 {
+ return
+ } else if id == -1 {
+ log.Fatal("Can't update")
+ }
+
+ if dist < q.array[id].dist {
+ // The update function update the distance
+ q.array[id].dist = dist
+ q.array[id].path = path
+ } else {
+ return
+ }
+
+
+ // And because the distance modify on the position
+ // in the binary tree, we have to update it too.
+ // Because the new distance if lower than the
+ // old one, we have to push id down to the leafs
+ for i := id ; i > 1 ; i = i >> 1 {
+ if q.array[i].dist < q.array[i>>1].dist {
+ q.array[i], q.array[i>>1] = q.array[i>>1], q.array[i]
+
+ q.ref[q.array[i].node.id], q.ref[q.array[i>>1].node.id] = i, i>>1
+ } else {
+ break
+ }
+ }
+}
+
+func dijkstra( nodes []Node, src, dst int) (dist int, path []int) {
+ // Initialisation of the Dijkstra's priority queue
+ priority := DijkstraPQueue{}
+
+ priority.ref = make([]int, len(nodes))
+ for i := range priority.ref {
+ priority.ref[i] = -1
+ }
+
+ priority.push( DijkstraNode{ node: &nodes[src], dist: 0, path: make([]int, 1) } )
+
+
+
+ // Main algorithm
+ var node DijkstraNode
+ var err error
+ for node,err = priority.pop() ; err == nil && node.node.id != dst ; node,err = priority.pop() {
+ for _,edge := range node.node.edges {
+ if priority.ref[edge.dst] != -1 {
+ tmp := make([]int, len(node.path))
+ copy(tmp, node.path)
+ priority.update( edge.dst, node.dist + edge.value, append(tmp, edge.dst))
+ } else {
+ tmp := make([]int, len(node.path))
+ copy(tmp, node.path)
+ priority.push( DijkstraNode{ node: &nodes[ edge.dst ], dist: node.dist + edge.value, path: append(tmp, edge.dst) } )
+ }
+ }
+ node.path = []int{}
+ }
+ if node.node.id == dst {
+ v := 0
+ for _,e := range nodes[1].edges {
+ if e.dst == 0 {
+ v = e.value
+ }
+ }
+ return node.dist + v, node.path
+ } else {
+ return -1, nil
+ }
+
+}
+
+func extractRecord( record []string ) []int {
+ row := make([]int, len(record))
+
+ for i := range record {
+ if v, err := strconv.Atoi(strings.TrimSpace(record[i])) ; err == nil {
+ row[i] = int(v)
+ } else {
+ log.Fatalln(err)
+ }
+ }
+
+ return row
+}
+
+
+func main() {
+ file, err := os.Open("p083_matrix.txt")
+
+ if err != nil {
+ log.Fatal(err)
+ }
+
+ array := make([][]int, 0)
+ reader := csv.NewReader(file)
+
+ line,err := reader.Read()
+
+
+ for ; err == nil ; line,err = reader.Read() {
+ array = append( array, extractRecord(line) )
+ }
+
+ id := func( x, y int) int {
+ return x * len(array[0]) + y
+ }
+
+ nodes := make([]Node, 0)
+
+ for i,r := range array {
+ for j,v := range r {
+
+ edges := []Edge{}
+
+ if i > 0 {
+ edges = append( edges, Edge{ dst: id(i-1,j), value: array[i-1][j]} )
+ }
+ if j > 0 {
+ edges = append( edges, Edge{ dst: id(i,j-1), value: array[i][j-1]} )
+ }
+ if i < len(array)-1 {
+ edges = append( edges, Edge{ dst: id(i+1,j), value: array[i+1][j]} )
+ }
+ if j < len(r)-1 {
+ edges = append( edges, Edge{ dst: id(i,j+1), value: array[i][j+1]} )
+ }
+ nodes = append(nodes, Node{ id: id(i,j), edges: edges, value: v } )
+ }
+ }
+ res,path := dijkstra(nodes, 0, len(array)*len(array[0])-1)
+ fmt.Println(res)
+ fmt.Println(path)
+ fmt.Println("Resum")
+ sum := 0
+ for _,id := range path {
+ sum += nodes[id].value
+ }
+ fmt.Println(sum)
+}
+
diff --git a/p83/p83_test.csv b/p83/p83_test.csv
new file mode 100644
index 0000000..9b8eaef
--- /dev/null
+++ b/p83/p83_test.csv
@@ -0,0 +1,5 @@
+131, 673, 234, 103, 18
+201, 96, 342, 965, 150
+630, 803, 746, 422, 111
+537, 699, 497, 121, 956
+805, 732, 524, 37, 331
diff --git a/p83/pqueue.go b/p83/pqueue.go
new file mode 100644
index 0000000..984c403
--- /dev/null
+++ b/p83/pqueue.go
@@ -0,0 +1,63 @@
+package main
+
+import "errors"
+
+type PQueue struct {
+ id int
+ array []int
+}
+
+func (q *PQueue) isEmpty() bool {
+ return q.array == nil || len(q.array) < 2
+}
+
+
+
+func (q *PQueue) push( v int) {
+ if q.array == nil {
+ q.array = make([]int, 1)
+ }
+ q.array = append(q.array, v)
+
+ for i := len(q.array) - 1 ; i > 1 ; i = i >> 1 {
+ if q.array[i] > q.array[i>>1] {
+ q.array[i], q.array[i>>1] = q.array[i>>1], q.array[i]
+ } else {
+ break
+ }
+ }
+
+ return
+}
+
+func (q *PQueue) pop() (v int,err error) {
+ if q.isEmpty() {
+ return -1, errors.New("PQeueue empty")
+ }
+
+ v = q.array[1]
+
+ q.array[1] = q.array[len(q.array)-1]
+ q.array = q.array[:len(q.array)-1]
+
+
+ ind := 2
+ for i := 1 ; i*2 < len(q.array) ; i = ind {
+ if i << 1 + 1 < len(q.array) {
+ if q.array[i<<1+1] > q.array[i<<1] {
+ ind=i<<1+1
+ } else {
+ ind=i<<1
+ }
+ }
+
+ if q.array[ind] > q.array[i] {
+ q.array[ind], q.array[i] = q.array[i], q.array[ind]
+ } else {
+ break
+ }
+ }
+
+
+ return
+}
diff --git a/p83/test.go b/p83/test.go
new file mode 100644
index 0000000..11c3249
--- /dev/null
+++ b/p83/test.go
@@ -0,0 +1,40 @@
+package main
+
+
+import "fmt"
+import "math/rand"
+import "time"
+
+
+func main() {
+ rand.Seed(time.Now().Unix())
+
+ v := PQueue{}
+
+ n := rand.Int() % 5000 + 5000
+
+ for i := 0 ; i < n ; i++ {
+ if rand.Int()%10 == 2 && v.isEmpty() == false {
+ fmt.Println("🦊");
+ for j := 0 ; j < 10 && v.isEmpty() == false ; j++ {
+ fmt.Println( v.pop() )
+ }
+ fmt.Println(v)
+ } else {
+ v.push( rand.Int() % 200 )
+ fmt.Println
+ }
+ }
+
+ v.push(10)
+ fmt.Println(v)
+ v.push(20)
+ fmt.Println(v)
+ v.push(11)
+ fmt.Println(v)
+ v.push(31)
+ fmt.Println(v)
+ v.pop()
+
+ fmt.Println(v)
+}