From 5bdc9fabaf0534b62cb808ee6062970ea98425c7 Mon Sep 17 00:00:00 2001
From: Ridho Pratama <p.ridho@yahoo.co.id>
Date: Thu, 11 Apr 2019 17:58:23 +0700
Subject: [PATCH] Added code

---
 makefile    |    2 +-
 out         | 5000 +++++++++++++++++++++++++++++++++++++++++++++++++++
 src/main.cu |  194 +-
 3 files changed, 5189 insertions(+), 7 deletions(-)
 create mode 100644 out

diff --git a/makefile b/makefile
index 2d1b24c..8a43cc2 100644
--- a/makefile
+++ b/makefile
@@ -1,2 +1,2 @@
 all:
-	nvcc -g -o main src/main.cu
\ No newline at end of file
+	nvcc -g -std=c++11 -o main src/main.cu
\ No newline at end of file
diff --git a/out b/out
new file mode 100644
index 0000000..7cd5542
--- /dev/null
+++ b/out
@@ -0,0 +1,5000 @@
+23934
+213750
+296358
+597133
+901216
+2171588
+2459514
+2974509
+3132558
+3402752
+3922093
+4346436
+4454296
+5191188
+5315472
+5955117
+6597189
+6685270
+6706321
+6727246
+6867850
+7324947
+8152153
+8612641
+8689892
+9609878
+9868812
+10466976
+11156299
+11858997
+12820628
+13056894
+13491401
+13616114
+14063577
+14072563
+15792940
+16367584
+16723921
+17127771
+17225141
+18074193
+18293559
+18498994
+18542023
+19127129
+19651057
+20016106
+20021219
+20123571
+21503188
+21619163
+21956851
+22461125
+22877414
+23091747
+23824924
+23832867
+24189616
+25030386
+25152901
+25595588
+25796127
+26706491
+26746001
+26864256
+27186511
+27365919
+27576534
+27593388
+28404860
+28419579
+28490072
+28904898
+29065216
+29359626
+29500686
+29863101
+29886121
+30247885
+30556227
+31750450
+32018139
+33124663
+33174375
+34011995
+34218435
+34318836
+34539735
+34905775
+35051742
+35216007
+35730019
+37654559
+39114446
+39143163
+40667397
+40968150
+41189412
+41339959
+41620122
+41817015
+42144715
+42473860
+42784938
+43286474
+43520378
+44673064
+45578998
+46270640
+46740799
+47139493
+48809829
+49044748
+49239186
+49580337
+50056327
+50296039
+50818232
+50912666
+51039929
+51182995
+51726110
+54127817
+54475589
+55036484
+55364264
+55709343
+55825838
+56265413
+56301581
+57220204
+57862384
+58322664
+58445190
+58963897
+59424395
+60243311
+60306961
+60787081
+61000831
+62137063
+63009900
+63083592
+63477524
+63654233
+63705737
+63735423
+63756850
+63788990
+64119396
+65138264
+65347628
+67126236
+67224420
+67863444
+67932723
+68220954
+68545161
+68696167
+68853868
+69108320
+69968236
+70508267
+71009147
+71031794
+71190815
+71563776
+71607659
+71637238
+72093727
+72826838
+72990630
+73620875
+73630224
+74108123
+74337801
+74651710
+74758491
+75330731
+75393036
+75406370
+75573031
+75631005
+76959445
+77169898
+77441809
+77463812
+77612345
+77720324
+78256136
+78572868
+79615902
+79656503
+79854542
+81021960
+81301155
+81703059
+82632997
+82905527
+83158228
+83312390
+84377199
+84856923
+85240883
+86453803
+86533709
+87539518
+88756155
+88785711
+88856128
+88967752
+89984534
+90258425
+91289040
+92793707
+92975360
+93904723
+94143289
+95012994
+95122522
+95236118
+96076738
+96514106
+97058664
+97439539
+97861406
+99219344
+99321229
+99327394
+99920346
+100268570
+100450324
+100615599
+100903852
+101026554
+101370239
+101774293
+102150729
+102722362
+102728536
+103381956
+103783999
+104158941
+104986880
+104988686
+105059969
+105446265
+105657160
+107060989
+107173374
+107297367
+107520834
+107778253
+108663279
+111849982
+111867528
+111945777
+112086448
+112350960
+112727000
+112973674
+112998735
+113124361
+113127973
+113989789
+114727790
+115551790
+115679293
+116151809
+116227612
+116347068
+116392167
+116767169
+116921454
+117062990
+117841640
+118111522
+118213406
+118700933
+118701560
+119249096
+119277197
+119970012
+120323589
+120395268
+120461272
+120871953
+120892723
+121246003
+121651961
+122031805
+122113100
+122171230
+122640204
+122999735
+123617024
+124009801
+124438713
+124493432
+124693859
+125586456
+126142004
+126505047
+127511661
+128143262
+128348733
+128723815
+129388418
+129483836
+130073831
+130847685
+131446580
+131791313
+132047222
+132239925
+132929685
+132935430
+133142543
+133390522
+133803732
+134069154
+134585871
+134672412
+134722887
+134778440
+135552716
+136532343
+137029595
+137353281
+137484849
+137488138
+138296683
+138297705
+138380372
+138807292
+139030786
+139032643
+140215666
+141018038
+141138613
+141914466
+143621461
+144404885
+145230533
+147351691
+149516887
+149636296
+151304708
+152058238
+152220636
+152254752
+152355390
+152472311
+153063605
+153458138
+153759570
+153859665
+154061423
+154585990
+154619664
+154904872
+155957889
+156061320
+157219985
+157638633
+158086220
+158214275
+158387291
+159339343
+160912276
+161468148
+161501532
+161593927
+161616153
+161695654
+161986050
+162166099
+162669820
+162958412
+163856872
+164110807
+164667545
+165316029
+165339425
+165804719
+166029300
+166393234
+166799894
+166939168
+167356273
+167648717
+168196257
+168360948
+168669497
+169415817
+170282354
+170385239
+170387358
+170632371
+172424344
+172525667
+172825685
+172970311
+173646163
+174007405
+174026749
+174675238
+175324469
+176333995
+176872249
+177496143
+177707705
+178203599
+180962153
+181054723
+181081836
+181082643
+181323188
+182022928
+183188299
+183493844
+184242190
+184384259
+184694719
+185089748
+185226133
+185598148
+185600690
+185646518
+185686881
+185760495
+185875113
+185952297
+186293453
+186600753
+187427873
+188212232
+189151217
+190103854
+190184787
+190280274
+190402825
+190838327
+190866958
+191190571
+191401807
+191866787
+192530672
+193123878
+193360808
+193375825
+193897170
+194033514
+195094834
+195300200
+196379894
+196939891
+197047461
+197475885
+197515358
+197699633
+197830121
+198172384
+198259611
+199258865
+199483144
+199583013
+200993688
+201131386
+201506045
+202426985
+202452505
+205228196
+205851960
+207637815
+207727031
+207949858
+208219453
+208641025
+209545827
+209771559
+211786387
+212660250
+213014476
+213065486
+213536868
+213665946
+213766259
+215120086
+215808919
+216002114
+216017837
+216056404
+216796851
+217112094
+217916531
+217967979
+217972248
+218466902
+219489726
+220308714
+222292123
+222353193
+222403884
+223396996
+223452581
+224450113
+224577615
+225402083
+225836008
+226381425
+226636069
+226664039
+226816729
+227910973
+228226735
+228355726
+228781138
+229075386
+230234596
+230293719
+230407083
+231468991
+231978749
+232346682
+233096479
+233442537
+233574885
+233683321
+234255070
+234901233
+234943942
+236448315
+238019491
+238989998
+240070339
+241103266
+242191669
+242302885
+242845541
+242971490
+243073230
+243530338
+243842938
+243920530
+245095627
+245719323
+246161829
+246336008
+246340090
+246785606
+248279847
+248340648
+248421847
+248631330
+248783473
+248845064
+249266843
+249799639
+249882431
+250390260
+250465676
+250880399
+251006231
+251045739
+251109976
+251151975
+251471713
+251916213
+252286455
+252472089
+252571707
+252866606
+254278462
+254500017
+255070935
+255480776
+255646218
+255696418
+255744997
+256833792
+257165735
+257574902
+257793635
+258061914
+258185560
+258311106
+258979470
+259109131
+259948176
+261192017
+261323698
+261441438
+261714756
+261931803
+263519416
+263969550
+264211558
+264787805
+265243646
+267435521
+267833897
+268057008
+268263798
+268704351
+268740042
+269149271
+269807180
+270296056
+271532912
+272061851
+272109197
+272361617
+272426339
+272566307
+272959352
+273417227
+274418594
+274772411
+274973201
+275188041
+275910416
+275972765
+276048162
+276150428
+277349246
+277534190
+277887047
+278151068
+279300325
+279617540
+279904952
+279917533
+280483285
+280706710
+280991932
+281724829
+282085511
+282275480
+282699213
+283263901
+283952339
+284034774
+284765325
+285673028
+285830717
+286691621
+286963880
+287292894
+287472821
+288835126
+289019063
+289140974
+289550254
+289785483
+289814520
+290599593
+290628998
+290953632
+291209904
+291328953
+291814054
+292745314
+292911790
+293457964
+294499148
+294598845
+295432879
+296055294
+296702367
+296789675
+297083606
+297216472
+297593505
+297619979
+297983949
+298982745
+299764184
+300024748
+300830281
+300978794
+301526589
+302257784
+302641671
+302770168
+303504660
+303565828
+304249131
+304890833
+304904498
+305086472
+305357932
+306346862
+306840825
+306921112
+307009665
+307860134
+308516194
+308549862
+309729974
+310008763
+310226019
+310371067
+310554653
+310650594
+310722055
+311120371
+312902870
+313017156
+313026569
+313061975
+314182190
+314619829
+314637754
+314966931
+314979679
+315356070
+315397329
+315688116
+315934413
+316185207
+316235817
+316977832
+317377732
+317620829
+318341074
+318453047
+318777396
+319300977
+321117672
+321371180
+321551486
+321890823
+321979981
+322164079
+322866606
+324198689
+324522518
+325084823
+325172450
+326004621
+326702388
+327441952
+327742798
+327766429
+327790400
+328352436
+328568409
+329460906
+330552796
+330554195
+332141462
+332445271
+333015356
+333044386
+333053675
+333324437
+333754242
+334077473
+335222113
+335233176
+335600561
+335649157
+336232984
+336558220
+336643863
+337452056
+337503082
+337576964
+337746256
+338198311
+338815595
+339253923
+339708478
+341015345
+341181794
+341630544
+341970222
+342241309
+342815876
+342857791
+342960597
+343674259
+344547928
+345111594
+346677195
+346777746
+346811470
+346934309
+347108159
+348448002
+349153591
+349162625
+349523704
+349595672
+349678387
+349806853
+351477007
+352308844
+353848053
+353850832
+354096393
+354904404
+355704455
+355838961
+356001384
+357280550
+358758907
+358775542
+360500063
+360531616
+360586051
+360812717
+361000232
+361923533
+362602225
+363105959
+363236132
+363870891
+364507651
+364550802
+364955874
+365483821
+366175578
+366335866
+366585807
+366911060
+367549703
+367651904
+368473835
+369511112
+370575751
+370662389
+371075948
+372044524
+373178222
+373569218
+373655635
+373714500
+374649504
+374688442
+375967511
+376374090
+376752678
+377560408
+378065389
+378447955
+379303133
+379435221
+379567598
+379637090
+379674999
+379718302
+379882500
+379951980
+380226943
+380356867
+380363080
+380478179
+381132555
+381397063
+381480110
+381783855
+382097924
+382401786
+382878699
+383180841
+383987552
+384200606
+384544523
+384557348
+384640574
+384658916
+384779785
+385939930
+387573509
+387702151
+387876452
+389028427
+389756264
+390194441
+390216478
+390285091
+390897568
+391193927
+391451852
+391918976
+392516218
+392652929
+392800196
+392901952
+394079032
+395169745
+395713647
+395912515
+396003029
+396059679
+396606068
+396705206
+396815991
+397144040
+397795425
+397919257
+398037222
+398067240
+398912215
+399490557
+399956759
+400321336
+400539359
+400789573
+400926484
+401412231
+401515039
+402100977
+402344037
+403014625
+404786440
+404859208
+404935213
+406032735
+406295729
+406471045
+406842295
+406875510
+406898787
+407262275
+407284272
+407482678
+407519468
+407871532
+408622170
+409141887
+410465468
+410631434
+410682237
+412397376
+412640346
+413278616
+413516970
+413725540
+414226102
+414662944
+415871922
+417289460
+417511609
+417651642
+417725767
+418290063
+418528985
+418721134
+418835499
+421867228
+422269304
+422419944
+423156670
+423221054
+423353337
+425346291
+425786449
+426181117
+427154789
+427496338
+429905384
+430063678
+431162591
+432329419
+432400191
+433659790
+433956168
+434953116
+435618812
+436572448
+436969329
+437076277
+438182870
+438454886
+438657545
+438883344
+438883573
+439107489
+439162704
+439513744
+439697403
+440230202
+440340298
+440847683
+441776216
+442637918
+444197922
+444240931
+444338231
+444399897
+444498858
+445497356
+445913461
+446411193
+446582170
+446601491
+446825097
+447207665
+447709727
+449682532
+450040318
+450188828
+450463412
+450913370
+451530408
+452354361
+452794546
+452979123
+453102498
+453125712
+453350899
+453536197
+453825608
+454641776
+454971125
+455095274
+455623503
+455636003
+457060601
+457078350
+457222372
+457273910
+457658556
+458044528
+458255689
+458405100
+458728969
+459192574
+459639064
+459852815
+460040227
+460178473
+461276015
+461369921
+461503499
+461796427
+461860817
+462047825
+462998819
+463149657
+464376911
+464579370
+464739672
+464961477
+465217267
+465402927
+465726717
+465758773
+465845490
+466483513
+467034842
+467402080
+467609085
+468364229
+468383487
+468504014
+468924965
+468984400
+469537736
+469558825
+469634563
+469938671
+470441008
+470730771
+470749460
+470973255
+471466299
+471535602
+471872437
+472028326
+472269160
+472602531
+472617136
+473018181
+473662302
+474427287
+474485305
+474512123
+474566754
+474803445
+475372453
+475749614
+475819447
+476445299
+477277818
+477492915
+478151145
+478920969
+479498920
+479744019
+481094112
+483021303
+483589224
+483920788
+484086052
+484169290
+484396079
+485705212
+486073807
+486159076
+486220128
+486238302
+486583263
+486798939
+486920433
+487368067
+487509451
+487855314
+488266903
+488461189
+488575483
+489446965
+489555799
+489598575
+489723932
+490469028
+491500957
+492755548
+492888814
+493319527
+494996147
+495176598
+495192706
+495491009
+495761623
+496912002
+497066217
+497287626
+497704527
+497938290
+498849105
+499408643
+499425807
+499658678
+499689319
+501565433
+501661495
+501840115
+501897646
+502257098
+502710688
+503189128
+503647944
+504729693
+504800926
+504852607
+504973319
+505036176
+505568084
+505591915
+506505773
+506606239
+506996415
+507297946
+507348081
+507596112
+507723746
+508564136
+508663222
+508692516
+509169844
+509825577
+510971320
+511030300
+511750071
+512173292
+512201675
+512664844
+512836656
+513011483
+513077774
+513203234
+513455407
+513497904
+513891790
+513918531
+514849074
+515107349
+515885500
+516744509
+517182198
+517528021
+518195895
+518323823
+518760161
+518978864
+519819521
+520248283
+520853646
+520949002
+521150283
+521385990
+521625936
+521636029
+521764790
+522241311
+522730174
+522849598
+523154685
+523199133
+523630570
+524229719
+524330144
+524360832
+524417479
+524445100
+524549137
+524830979
+525096373
+525877752
+526231169
+526906402
+527419856
+527752974
+528916741
+530138313
+530799850
+531113918
+531208537
+531312482
+531401862
+532147310
+532341109
+533325239
+533470728
+534148350
+534610534
+534648298
+534926810
+535205444
+536380515
+537314105
+537356981
+537987559
+538145117
+538518560
+539504932
+540927207
+541728533
+541794070
+543644425
+544215950
+544685596
+545204057
+546348635
+546737487
+547114647
+547131295
+547273705
+547617182
+547875027
+548667836
+549051941
+549547667
+549675457
+551084087
+551651968
+551797809
+552306460
+552449435
+553396556
+553586936
+554481294
+554816348
+554840685
+555221462
+555843239
+556600735
+557180047
+557980431
+558676811
+559903086
+560217489
+560642900
+560912506
+561423760
+561501371
+562292062
+562376836
+563091955
+563190184
+563224342
+563613494
+564086400
+565221088
+565516820
+565943368
+566984456
+567121392
+567371906
+569103762
+569363149
+569700040
+570042692
+570110514
+571499412
+571556756
+571806712
+571882036
+572271981
+572463916
+573221792
+573552491
+573694839
+573990946
+574140090
+574335946
+575388556
+575590461
+575828111
+576146773
+576245144
+577057288
+577210784
+577278309
+577630019
+578308087
+578385933
+579456243
+579716906
+579801607
+580692658
+581243674
+581321810
+581502307
+581896537
+582531254
+583093155
+583393648
+583470870
+584206676
+584466240
+585350204
+585530554
+587414609
+587848975
+588263870
+588452684
+589350519
+589585479
+589610834
+590346391
+590409690
+590678935
+591071316
+591230199
+591824649
+592185063
+594756829
+595012747
+595095281
+595549541
+595803686
+595864400
+597721913
+599166974
+599231172
+601315779
+601413095
+601421293
+601607404
+601720763
+602232527
+602289544
+603741055
+603757146
+603769894
+604595706
+604687211
+604860636
+605849929
+606199088
+606470152
+607277889
+607682193
+607930589
+607965686
+608129405
+608159104
+608214424
+609095546
+610257093
+610281255
+610472502
+610705608
+611498655
+611750472
+611763826
+612536715
+612783463
+612785019
+614368639
+614487430
+614558912
+615465439
+615670981
+616368801
+617029198
+617636508
+617923478
+618131225
+618672277
+618767163
+618814585
+618829540
+619439349
+619647351
+619744133
+619756309
+620764509
+621071969
+621507909
+622431722
+622661769
+622860133
+624421863
+624784677
+625814487
+626670992
+627117169
+629149987
+629491123
+629743679
+630245879
+630316420
+630337841
+630400017
+630678321
+631105258
+631333524
+631714113
+632143960
+632350801
+633545194
+633559203
+633647931
+633916219
+633990724
+634034749
+634513353
+634627891
+635629081
+635735616
+635978885
+635979303
+636021214
+637227575
+637917305
+637957421
+639717522
+639785694
+640004040
+640205294
+640922866
+641108519
+641371871
+642196191
+642646444
+643411425
+643942570
+644399903
+644723023
+644941569
+645748694
+646288399
+646315053
+647437884
+647801531
+647920096
+648012892
+648865396
+649365125
+649428611
+649907657
+649922460
+650682961
+650896385
+651387627
+652255195
+652733421
+652952687
+653168764
+653184251
+654630788
+654697570
+655537063
+655653120
+655870554
+656088963
+657485076
+657830830
+658096529
+658417776
+658548863
+659250298
+660040971
+660824896
+660920324
+661137877
+662388996
+662861724
+663161982
+663822753
+664284504
+664954239
+665061400
+665141434
+665392794
+665833345
+666297247
+666872117
+667479419
+667970979
+668361203
+668810478
+669235743
+670091874
+670341781
+670389322
+670984295
+670996389
+672677971
+672906671
+673356651
+673491883
+674124560
+674341777
+674401946
+675594773
+676408097
+678118031
+678180703
+679255468
+679416048
+680061286
+680777288
+682126495
+683023243
+683454852
+683656694
+684884793
+685221830
+685242072
+685443445
+686535889
+686832041
+686977077
+687944674
+687980736
+688120643
+688325644
+689052779
+689139268
+689370274
+689534503
+690408526
+692643345
+693085156
+693169702
+693263396
+693541019
+693592208
+694359191
+694920265
+694972065
+695587228
+695625155
+696906135
+697279360
+698221235
+698367159
+698986999
+699159179
+699979634
+700368288
+700551228
+700716251
+701144910
+701685726
+701797079
+701964632
+703259019
+703317663
+703361764
+703753442
+704232185
+704238435
+704324345
+705081233
+705584333
+705616684
+706337567
+706498294
+706719652
+707248277
+707254630
+708283481
+708800774
+708850326
+709143052
+709204440
+711056085
+711499200
+711889925
+712289660
+712576561
+713405664
+713673778
+714960897
+714971367
+715685871
+715904298
+716163670
+716423819
+716592236
+716838149
+717579985
+718737505
+719451342
+719566899
+719937255
+719950677
+720152943
+720388907
+720455792
+721173823
+723236934
+723450541
+723481315
+724643294
+724999699
+725543216
+725617152
+725692478
+726060919
+726392702
+726423049
+726942926
+727555678
+727856832
+728192735
+728244473
+732354167
+732668424
+733481138
+733926637
+733998499
+734055199
+735035289
+735167345
+735446529
+735994419
+737144490
+737246661
+737439591
+737782377
+738633278
+738715152
+738907213
+739396617
+739771471
+739991094
+740039567
+740151222
+740293261
+740877302
+741637887
+741771065
+743813778
+743828965
+744125324
+744643758
+746344418
+747005166
+747142747
+747662775
+747749291
+748059824
+748789078
+750468780
+750480721
+750781259
+750877838
+750976287
+751018973
+751129024
+752898000
+754284883
+754614176
+755117481
+755763687
+756463547
+756724758
+757266692
+757381198
+758980740
+759190694
+759261659
+759525191
+759661468
+760117668
+760615934
+760715439
+761497213
+762186826
+762948529
+762962309
+763002806
+764368711
+764482864
+764901112
+765103149
+766628308
+766702597
+767286596
+767295356
+767301731
+767665261
+768364195
+768580298
+768796763
+768918470
+768942404
+769053620
+769493962
+769600550
+769927523
+770117510
+770164993
+770722356
+770790283
+771446426
+771641830
+771668101
+772868848
+772905602
+773699522
+774686685
+774762393
+776046394
+777895715
+778179234
+779330759
+779598579
+779653813
+780022546
+780092720
+780300364
+780871364
+782347058
+782669734
+783247730
+783586206
+783630576
+783718076
+783987291
+785013949
+785855566
+785861546
+786223556
+786569557
+788346429
+788663625
+788746810
+789047579
+791238886
+791439909
+791808079
+792233065
+792322744
+792433951
+792444296
+792841125
+793251626
+793723093
+794472812
+794505773
+794814909
+795076151
+796105874
+798105587
+798319152
+798557002
+799416960
+799650651
+800239192
+801782472
+802530724
+803011590
+805352699
+805468946
+805600440
+805631422
+805825118
+806253572
+806367878
+806699962
+807026614
+808646136
+808832448
+809596521
+809915580
+810747245
+811101139
+811909393
+812060631
+812262099
+812309331
+812576481
+813362761
+813427369
+814147690
+814263348
+814287382
+814991546
+815041951
+815160261
+816477041
+816718336
+816841665
+817224720
+817245177
+817967179
+818744579
+819114684
+820247012
+820632597
+820796631
+820851342
+820948736
+821565834
+822311848
+822555578
+823364023
+824142910
+824663456
+825359081
+825497949
+826236615
+826252372
+826693570
+827297137
+827677027
+827927172
+827941560
+828470034
+829328164
+829524554
+829552755
+829605023
+830370224
+830371712
+830731173
+830880159
+831562177
+832426984
+832458795
+832471060
+833757560
+833760903
+833853259
+834511482
+835296068
+835695058
+836099935
+836265934
+836571249
+836708185
+836977289
+837099962
+837292009
+837426330
+838226220
+838896383
+839980913
+840140886
+840142593
+840389985
+840457922
+840554232
+840587621
+840612598
+840724245
+840834142
+840855521
+840920478
+841446586
+841625121
+841681404
+842111693
+842487749
+842823102
+843152101
+843647470
+843950684
+843982251
+844429159
+844759696
+845435861
+845699794
+845718428
+845745019
+846485943
+847313248
+847424688
+847661187
+848004996
+848777065
+849243206
+849988506
+849997077
+850160843
+850362553
+851193441
+851376533
+851504365
+851578932
+851673462
+852039443
+852592306
+852769963
+853506041
+854025212
+854067419
+854325698
+854520670
+856501357
+857077425
+858271019
+858277667
+858310021
+859381031
+859835689
+860724191
+861270210
+861412955
+862719490
+863001555
+863310747
+863975460
+865153535
+866133892
+866408109
+866663975
+867919476
+868138771
+868191602
+868464769
+868737995
+868914668
+869412617
+869600835
+870108198
+870192827
+870448406
+871010481
+871105236
+871174127
+871508745
+871792515
+871962505
+872421140
+872918866
+872984343
+873595620
+873786880
+873954755
+874576727
+875440951
+875693789
+875786891
+876000241
+876041437
+876674640
+876701130
+876850191
+877065603
+877509459
+877591449
+877812601
+878307572
+878478779
+878538775
+878607207
+878711874
+879037053
+879299396
+879426815
+879741049
+879811724
+880317314
+880418864
+880438566
+880492278
+880502729
+880670844
+880879282
+881059802
+881356786
+882043897
+882194150
+882666055
+882770339
+884738445
+885030663
+885068893
+886019549
+887078650
+887535066
+888094659
+888582339
+888785268
+888915903
+888948057
+889105789
+891196029
+891815523
+892292996
+892597905
+892908030
+892914010
+894300388
+894468319
+894745623
+895162112
+895187749
+896478043
+896632954
+897049242
+897430373
+897435447
+897700988
+897745109
+897800201
+897828005
+898159481
+898277604
+899094604
+899892995
+899964948
+900813718
+901174423
+901214444
+901801455
+901815769
+902269967
+902983085
+903272597
+904017369
+904305017
+904343034
+904644688
+904885384
+904920696
+905748257
+906462424
+907239832
+907711928
+909038287
+909298163
+909538613
+909706388
+909718472
+910200856
+910602278
+910687046
+911351636
+912143112
+912298451
+912745856
+913088274
+913555006
+913598977
+914474009
+915251608
+915260744
+915533169
+915857005
+916178734
+916197952
+916316457
+916800184
+917769720
+917878239
+917917279
+918254365
+918558471
+918938998
+920186540
+920467657
+921361072
+921397948
+921589527
+922069927
+922910374
+923725777
+924461879
+924480871
+924839789
+924882793
+924924362
+925038303
+925117818
+925551419
+925840834
+926408757
+926438094
+926442649
+926546077
+926673125
+926695383
+926735678
+927612256
+927987629
+928164908
+928303341
+928622412
+929168475
+929401754
+930063183
+931436759
+931520595
+931872061
+932081661
+932126704
+934092231
+934190044
+934882959
+935198149
+935955663
+936202873
+936464072
+936867504
+937384108
+938660458
+938662387
+938847765
+939438859
+939576495
+940157710
+941145790
+941184859
+941587151
+942229836
+942451961
+942528569
+942954589
+944068831
+944323507
+944587992
+945131887
+945429147
+946286876
+947666753
+947855887
+947898595
+948811518
+948824740
+948892315
+948933847
+949439017
+950162230
+950467290
+951612766
+951988367
+952752833
+952759513
+954126818
+954536486
+954609382
+955000147
+955451307
+955495469
+955533538
+955715764
+956061587
+956505361
+956795067
+957016724
+958411919
+958514322
+958976520
+958995671
+959532298
+959849347
+960070928
+962761413
+962828022
+963464713
+963494276
+963711900
+963939730
+964419361
+965283159
+965534139
+965677562
+965884089
+966096374
+966563279
+966705149
+966998638
+967279575
+967361771
+967761230
+968211638
+970088971
+970165915
+970284418
+970367996
+970956471
+971157120
+971388262
+971853354
+972790462
+972865442
+973208178
+975759872
+976906628
+976986735
+977359882
+977886451
+978125811
+978344336
+978709080
+979636696
+980020311
+980690696
+981175012
+981349256
+982066649
+982516345
+982622885
+983800092
+983837680
+984911121
+985494189
+985873127
+986679713
+986827473
+988021442
+988119319
+988385030
+990262511
+990562046
+991459715
+991989788
+991993857
+992112977
+992319946
+992330013
+992456032
+993187167
+994484104
+995073073
+995986482
+996358988
+997043445
+997069593
+998006077
+998425105
+998532861
+998675296
+999045287
+999123256
+999576306
+999894836
+1000492057
+1000969656
+1001186550
+1001341992
+1001358664
+1002099416
+1004501435
+1004518720
+1004967589
+1005521356
+1005769459
+1005775041
+1005971165
+1006261941
+1006343085
+1006615883
+1006664227
+1006755330
+1006781160
+1007620042
+1008117097
+1009566985
+1009787722
+1010245085
+1010252547
+1010868593
+1011547600
+1012070836
+1012328352
+1012630631
+1012777663
+1013508407
+1013535846
+1013679465
+1013896052
+1014121953
+1015836789
+1016093839
+1016489493
+1016753120
+1017127610
+1017134002
+1017542217
+1017875517
+1019046702
+1019060712
+1019072935
+1020557609
+1020814813
+1022155115
+1022815045
+1023049407
+1023588962
+1023639352
+1023872290
+1024096459
+1024200889
+1025471594
+1026927843
+1027170034
+1027202169
+1027559768
+1028355775
+1028617742
+1028622657
+1028720480
+1029087844
+1029721019
+1029750607
+1029798920
+1030319264
+1030519542
+1030527091
+1031015649
+1031057571
+1031189946
+1031216988
+1031277749
+1031809549
+1032082267
+1032138384
+1032428290
+1032635061
+1032869333
+1033120683
+1034155793
+1034161605
+1034358867
+1035052833
+1035349086
+1036783587
+1036979054
+1037508899
+1037688875
+1038384353
+1038418991
+1038932375
+1039843625
+1039947042
+1040181837
+1040578067
+1040891312
+1042194309
+1042793044
+1043074740
+1043078509
+1043586517
+1044163859
+1044524094
+1044586989
+1045050466
+1045414783
+1046086695
+1046113041
+1046334227
+1047330875
+1047590489
+1047830092
+1047919128
+1048641939
+1048732903
+1049061778
+1050155332
+1050211432
+1050341656
+1050430637
+1051332592
+1051813925
+1052286722
+1052916622
+1052990918
+1053299876
+1053516102
+1053593115
+1053799766
+1054354716
+1054531942
+1055634025
+1055935533
+1057074214
+1057325363
+1057329226
+1057802003
+1058065101
+1058244899
+1059175865
+1059293406
+1060164643
+1060275191
+1060469604
+1060782711
+1061021653
+1061470079
+1061779408
+1061871071
+1061924479
+1062245996
+1062269972
+1063045084
+1063966184
+1064212205
+1064936445
+1065393105
+1065770365
+1065984752
+1066063571
+1066363987
+1066466969
+1067011290
+1068029166
+1068881525
+1069261283
+1069434628
+1069461512
+1069544759
+1069623426
+1069923966
+1069992142
+1070137098
+1070804072
+1070924468
+1071155641
+1071486514
+1072403171
+1073766139
+1073888108
+1074854744
+1074926551
+1075346360
+1075569066
+1075604267
+1076334787
+1076358157
+1077710553
+1077908050
+1078834697
+1078918697
+1079468548
+1079672667
+1079718803
+1079876223
+1079931645
+1080531193
+1080570510
+1080739319
+1080994303
+1081121774
+1081287698
+1081333613
+1081540470
+1082201750
+1082662848
+1082942913
+1083487995
+1083730320
+1084058702
+1084611063
+1084633474
+1084734065
+1085145266
+1085473581
+1085584349
+1086167579
+1086369929
+1086963659
+1087148805
+1087999764
+1088936590
+1089056013
+1089343646
+1090200304
+1090476771
+1090498261
+1090541021
+1091401168
+1091462655
+1091812936
+1092014639
+1092280019
+1092592192
+1093292985
+1093861304
+1094362757
+1095773043
+1096206859
+1097111269
+1097944365
+1098273566
+1098903088
+1099073579
+1099594159
+1099711173
+1100027034
+1100473381
+1100741495
+1101097922
+1101545436
+1101556576
+1102072020
+1102209104
+1103511156
+1104944284
+1105471812
+1105938322
+1106049165
+1106594531
+1107245983
+1107673058
+1107755919
+1107844774
+1108044518
+1108091058
+1108517508
+1108755618
+1109799364
+1109922364
+1109923104
+1110551809
+1110995440
+1111223904
+1111348636
+1111498302
+1111673450
+1111913622
+1111943550
+1112292396
+1112547055
+1113429033
+1113717133
+1113965722
+1114046027
+1114921616
+1114971803
+1115610847
+1116019379
+1116579084
+1117340404
+1117565648
+1117929074
+1117932625
+1118040001
+1119022926
+1119206839
+1119337427
+1119651086
+1120295798
+1120358222
+1120407844
+1120571525
+1121130142
+1121464431
+1121799257
+1121957952
+1122270586
+1122399578
+1122897791
+1123579704
+1123710199
+1123835189
+1124395197
+1125273353
+1125351103
+1125384018
+1126279919
+1126471534
+1127093767
+1128002758
+1128550286
+1128958250
+1129089769
+1129238968
+1129649179
+1129711111
+1129976156
+1130317166
+1130516817
+1131551243
+1131684503
+1132161989
+1132488400
+1133543597
+1133655857
+1134218249
+1134459598
+1135152663
+1135319251
+1135541468
+1135598522
+1137328011
+1137334542
+1137595274
+1139093195
+1139399547
+1140552318
+1140688085
+1141401170
+1141443464
+1141770237
+1141884694
+1142788490
+1142912390
+1143201716
+1143657087
+1143760525
+1144753118
+1144782128
+1144845945
+1145420545
+1145605070
+1146509639
+1147243673
+1148609124
+1148956081
+1150207131
+1150431356
+1150928466
+1151766394
+1151998697
+1152644825
+1152966052
+1153515764
+1153747243
+1153838985
+1154017472
+1154262551
+1154585996
+1155283960
+1155356110
+1155627337
+1155801799
+1155956630
+1156570753
+1157861195
+1158247995
+1158612410
+1159109167
+1159172648
+1159425168
+1159993999
+1160810118
+1161079656
+1161261388
+1162486392
+1162621715
+1162724895
+1162807400
+1163276241
+1163382401
+1163606529
+1163865603
+1164191699
+1164923549
+1165041417
+1165150572
+1166204325
+1166390696
+1166715126
+1167919865
+1167971839
+1168299671
+1169183565
+1169802184
+1170029864
+1171378820
+1171715681
+1171831062
+1172544631
+1172977881
+1173142695
+1173892272
+1174878299
+1175363534
+1175625879
+1175993890
+1176160194
+1176904710
+1177099799
+1177124860
+1177275354
+1178221166
+1178226729
+1178298096
+1178763659
+1179027058
+1179400074
+1179585161
+1179827965
+1179861567
+1179927083
+1180344939
+1180782079
+1181191422
+1181463821
+1181763794
+1182002745
+1183614578
+1183837162
+1184196345
+1185184305
+1185754772
+1186023369
+1186152522
+1187411050
+1187425249
+1187692262
+1187745934
+1188537676
+1188576841
+1188718688
+1189280465
+1189404118
+1189916547
+1190617506
+1190757635
+1190886078
+1191386403
+1191724647
+1192173799
+1192453812
+1192511042
+1193575210
+1194114382
+1195298511
+1195349524
+1195962525
+1196142114
+1196323043
+1196633742
+1196660905
+1196776525
+1197535782
+1197665146
+1197761826
+1198053336
+1198091467
+1198146638
+1198193805
+1198546566
+1200601289
+1200818893
+1200928475
+1201764499
+1202611923
+1203427159
+1203812157
+1203819121
+1203819632
+1203854780
+1204369782
+1206307352
+1206339464
+1206484486
+1206502274
+1207470068
+1207680164
+1208110708
+1209104096
+1209572269
+1209755052
+1209815787
+1210057761
+1210168793
+1210594440
+1210914999
+1210944476
+1211231592
+1211619810
+1212181129
+1212979573
+1214861181
+1216262954
+1216540136
+1216986819
+1217123248
+1217275657
+1217294366
+1217604021
+1217725207
+1218182132
+1218462612
+1218564942
+1218841575
+1219612741
+1219765659
+1219773394
+1220457562
+1220986741
+1221581474
+1222049408
+1222792775
+1223058825
+1223334859
+1223486437
+1223980065
+1224829012
+1225647192
+1226091857
+1226388993
+1226441353
+1226644407
+1227089351
+1227128296
+1227374915
+1227904095
+1227932198
+1228235415
+1228452243
+1228755729
+1229344765
+1230238890
+1230896171
+1231047282
+1231156996
+1231435493
+1231601802
+1231954014
+1231987635
+1233995760
+1234562347
+1235005733
+1235852112
+1236121192
+1236757553
+1237011439
+1237569494
+1238323990
+1239218871
+1240174493
+1240200544
+1240718342
+1240778998
+1241036230
+1242168760
+1242393630
+1242812428
+1244406841
+1244486392
+1245909592
+1245956306
+1246404408
+1246468975
+1247049036
+1247115310
+1248987569
+1249080433
+1249581403
+1249750507
+1249878160
+1249911240
+1250709648
+1251459786
+1251620147
+1251748109
+1251791199
+1252107663
+1252510905
+1253044813
+1253986152
+1254513520
+1254637646
+1254693492
+1254886439
+1255321303
+1255402241
+1255744939
+1255930783
+1256292864
+1256303457
+1256503031
+1256743812
+1257182973
+1257702306
+1258117305
+1258198315
+1258388712
+1259308229
+1259467816
+1259845953
+1260139183
+1260992535
+1261101346
+1261771556
+1262733795
+1262972537
+1263913986
+1264020042
+1264425904
+1265216571
+1265228664
+1266538021
+1266824424
+1267492239
+1267494303
+1267598330
+1267619941
+1268678364
+1270715228
+1270999591
+1271217907
+1272224999
+1272642994
+1273372946
+1273771105
+1274434997
+1274831626
+1274908546
+1275089108
+1275102490
+1275628830
+1275938126
+1276350055
+1276380415
+1276539290
+1276820018
+1277182580
+1277453761
+1277519689
+1277985548
+1278785981
+1278844909
+1279486643
+1280300687
+1281134914
+1282344668
+1282409386
+1283362756
+1283498988
+1284490376
+1285204065
+1285895230
+1286358301
+1287007275
+1287419275
+1287681290
+1287970100
+1288390172
+1290206234
+1290302365
+1290365793
+1290516751
+1291250959
+1291980727
+1292682027
+1293051445
+1293117550
+1293203323
+1293315299
+1293582704
+1293787144
+1293991658
+1294150597
+1294259903
+1294355288
+1295692662
+1295821495
+1295998720
+1297010079
+1297136603
+1298722330
+1298854010
+1299917234
+1300636351
+1300759624
+1301020017
+1301305371
+1301665649
+1302055012
+1302332179
+1303099868
+1303106550
+1303244801
+1303428615
+1303464916
+1303618745
+1304715817
+1305868967
+1306126703
+1306524581
+1307872323
+1308246523
+1308598905
+1308711312
+1308865789
+1308993123
+1309005761
+1309674216
+1309887313
+1311266983
+1312045806
+1312057763
+1312238594
+1312859811
+1313626393
+1313840645
+1314378360
+1314581859
+1314980087
+1315235578
+1315550243
+1315609614
+1316135813
+1316795158
+1317362815
+1317628227
+1317685764
+1317955572
+1318109467
+1318112960
+1318117123
+1318817477
+1318826051
+1319759976
+1320193713
+1320998373
+1321476496
+1321526058
+1321570822
+1321783041
+1321902420
+1322223331
+1322445402
+1323514869
+1323707823
+1324131250
+1324389173
+1324398690
+1324883698
+1325050247
+1326823833
+1327267031
+1327883125
+1327907380
+1328986155
+1329356095
+1329548767
+1330056367
+1330591078
+1330591865
+1330630548
+1330665240
+1331590216
+1331603739
+1332403141
+1332961252
+1333430297
+1334271853
+1334409042
+1335016663
+1335097471
+1335252995
+1335935960
+1336351177
+1336362589
+1336577531
+1336692646
+1336778054
+1336830130
+1337021702
+1337140137
+1337696656
+1339268337
+1339359722
+1340579274
+1341260903
+1341346370
+1342931898
+1343067335
+1343451516
+1343703684
+1343765835
+1344501540
+1345309568
+1346354433
+1346793579
+1346970098
+1347305936
+1347452806
+1348296040
+1348938589
+1350122134
+1350471259
+1350500853
+1350836967
+1351621791
+1351687712
+1352750093
+1353636826
+1353652294
+1353965040
+1354220464
+1355305113
+1355727544
+1355869088
+1357093410
+1357246892
+1357270295
+1357367167
+1357501695
+1358070146
+1358211202
+1358258628
+1358654879
+1359018069
+1359161466
+1359175016
+1360982254
+1361164449
+1361325760
+1361447163
+1361836802
+1361877452
+1361939807
+1362084833
+1362708634
+1362897542
+1363312824
+1363479714
+1363488896
+1363786400
+1364318182
+1364604716
+1365914242
+1366325793
+1367193450
+1367423162
+1367476924
+1367654081
+1368655573
+1368876735
+1368879157
+1369106493
+1369264647
+1369472886
+1369653553
+1370401890
+1370407628
+1370450959
+1371079064
+1371111347
+1371850344
+1372170912
+1372256416
+1372341200
+1373093559
+1373454441
+1373715728
+1375225427
+1375794209
+1375903821
+1376230181
+1376285131
+1376432468
+1377474840
+1378095087
+1378228526
+1378426536
+1378655843
+1379246661
+1380254949
+1380430354
+1380973492
+1381586775
+1382600700
+1382801611
+1382969866
+1384627510
+1384772307
+1384870876
+1385082793
+1385225811
+1385622579
+1385695068
+1385934905
+1386030481
+1386453326
+1386907833
+1387235282
+1387988232
+1388199302
+1388272338
+1390027146
+1390384957
+1391072891
+1391547265
+1391908042
+1393114267
+1393654358
+1394280120
+1394428135
+1395039743
+1395171834
+1395275317
+1396337825
+1396582906
+1397159896
+1397251054
+1398483031
+1398655599
+1399224595
+1399324181
+1399957580
+1400439719
+1401047675
+1401213120
+1403140492
+1404114586
+1405061826
+1405287744
+1405328471
+1406639146
+1407516609
+1407797287
+1407824438
+1408344577
+1408759857
+1409023855
+1409663690
+1410049396
+1410263135
+1410445863
+1410940071
+1411239184
+1412121383
+1413004758
+1413057376
+1413114424
+1413502251
+1413522075
+1413602000
+1414723613
+1415050885
+1415083309
+1415263304
+1415607206
+1417314939
+1418450257
+1418842893
+1419010306
+1419066321
+1419229814
+1419395059
+1419602938
+1419716132
+1419884685
+1420412638
+1421154134
+1421869115
+1422718329
+1422945078
+1423187771
+1423329721
+1423499694
+1423951884
+1424133369
+1424152226
+1424764863
+1425491137
+1425528816
+1425750191
+1426225112
+1426627456
+1426697259
+1426857901
+1427245479
+1428072514
+1428239456
+1428792512
+1429491405
+1430295847
+1431536176
+1432310881
+1432407947
+1432410882
+1432500118
+1432508921
+1433310062
+1433542045
+1433949777
+1434091713
+1434450170
+1434610577
+1434697648
+1434698345
+1435139121
+1435976243
+1436445015
+1436451497
+1436639176
+1436656013
+1438209604
+1438244485
+1438928575
+1439085914
+1439243004
+1440241698
+1440451892
+1440540720
+1440745411
+1441232322
+1441472430
+1442108920
+1443012500
+1443398688
+1443496591
+1443528445
+1443665816
+1444070840
+1445592436
+1445750720
+1445821302
+1446878841
+1446893156
+1447008264
+1447702058
+1447831405
+1448410180
+1448743560
+1449054948
+1449694851
+1449801758
+1449931350
+1449945531
+1450227316
+1450228940
+1450775421
+1450977510
+1451521384
+1451633626
+1451998682
+1452905789
+1453424868
+1454471389
+1454523044
+1454630509
+1455049157
+1455106356
+1455455795
+1455618870
+1456259549
+1456487714
+1458351804
+1458489975
+1458537817
+1458841841
+1459403616
+1459480057
+1459483699
+1459705675
+1459875994
+1459894598
+1460135725
+1460474853
+1461062209
+1461070564
+1461100452
+1463031386
+1463295791
+1463504477
+1464233010
+1464420267
+1464721618
+1464742852
+1464842350
+1464933907
+1465047641
+1465905327
+1466808758
+1467609796
+1467776403
+1468612375
+1468653906
+1469204570
+1469706221
+1471499908
+1472614534
+1472683889
+1473017832
+1473205868
+1473368255
+1474779409
+1475347496
+1475821206
+1476575279
+1477242542
+1477379589
+1477458914
+1477927053
+1478145746
+1479142193
+1479280526
+1479949218
+1480017225
+1480672252
+1480947739
+1480969173
+1482138076
+1482531718
+1483582856
+1485039997
+1485359446
+1485431084
+1485598392
+1485690683
+1485714618
+1486521997
+1486540233
+1486693915
+1487283078
+1487714516
+1487928255
+1488133531
+1488695107
+1488695548
+1490585015
+1490787730
+1492471054
+1492509748
+1493076599
+1494154211
+1494680106
+1495626549
+1495919490
+1496046304
+1496760470
+1496802893
+1497880703
+1498169039
+1498638385
+1498763148
+1499592728
+1499958859
+1499978592
+1501116906
+1501539837
+1501746466
+1502558983
+1503377612
+1504197198
+1504705970
+1504888727
+1505186102
+1505192909
+1505357019
+1505407750
+1505535844
+1505584438
+1506136229
+1506741006
+1506798494
+1507265993
+1507432220
+1507576039
+1507982243
+1507998605
+1508794265
+1509326433
+1509456908
+1509788539
+1510540667
+1510901413
+1510935564
+1511591429
+1511628496
+1512565327
+1512891952
+1512893137
+1513111130
+1513627752
+1513924698
+1514254186
+1515198539
+1515373071
+1515720562
+1516323429
+1516386075
+1516832989
+1516836759
+1517243869
+1517560482
+1518765810
+1518917213
+1519120990
+1519230632
+1519242819
+1520643860
+1521515886
+1521798744
+1522776731
+1523192135
+1523702398
+1523983212
+1524167060
+1525910734
+1526355306
+1526407714
+1526749762
+1527055385
+1527513410
+1527721152
+1528127203
+1528676364
+1529103621
+1529137258
+1529511531
+1530146545
+1530538153
+1530778530
+1530825696
+1531065178
+1531140785
+1531300205
+1531690195
+1532870096
+1534785624
+1535072535
+1535205850
+1535599017
+1535805837
+1535886522
+1535978814
+1536840979
+1536869171
+1536924687
+1537043402
+1537100560
+1537438547
+1537466787
+1537694182
+1537797196
+1538366486
+1538495616
+1538650793
+1538801176
+1539292941
+1539301063
+1540087409
+1540276429
+1541014123
+1541024888
+1542797931
+1542852843
+1543471177
+1543780329
+1544172912
+1544482367
+1544599419
+1545555465
+1545845073
+1545984828
+1546235409
+1546341379
+1546396679
+1547527037
+1547842251
+1547854560
+1547938484
+1549863714
+1550212889
+1550723081
+1551181379
+1551370404
+1551423265
+1551593013
+1551626554
+1551632057
+1552058012
+1552815573
+1552846681
+1552904913
+1553549698
+1553573544
+1553889428
+1554026987
+1554641872
+1555121736
+1555631031
+1556417693
+1556618805
+1556768774
+1557018545
+1557647802
+1558573986
+1558668493
+1559579870
+1560504250
+1561735863
+1562241747
+1563087987
+1563247615
+1563629658
+1564290179
+1564312926
+1564755980
+1565935715
+1566618440
+1567097324
+1567440617
+1568263540
+1568683983
+1568780792
+1569097303
+1569814457
+1570220251
+1570671967
+1570920398
+1571637137
+1571699424
+1572238090
+1572504782
+1572725893
+1572781709
+1574045922
+1574860358
+1574908424
+1575015675
+1575023651
+1575281521
+1575664258
+1575805720
+1576554383
+1577115072
+1577163781
+1577573646
+1577606869
+1578142834
+1578358314
+1579080981
+1579195031
+1581570940
+1581922754
+1581998436
+1582014656
+1582234260
+1582568210
+1583894162
+1584145174
+1584319950
+1584341886
+1584348415
+1584894927
+1586087359
+1586109049
+1586843560
+1586962666
+1587338496
+1588540135
+1588631256
+1588881797
+1589283262
+1589606185
+1590135090
+1590269840
+1590589920
+1590663369
+1590860456
+1591459424
+1591816266
+1592307243
+1592328711
+1592638623
+1592818251
+1592873536
+1593002574
+1593388194
+1594028069
+1594583050
+1595514692
+1595604540
+1595637731
+1595705804
+1596144795
+1596306958
+1596337474
+1596834032
+1596908475
+1596968093
+1598034969
+1598108858
+1598771536
+1599404058
+1600135964
+1600181613
+1600405392
+1600567935
+1600773106
+1600868639
+1602193118
+1602322466
+1602541485
+1602547920
+1603030280
+1603908979
+1604467203
+1604551714
+1605165857
+1605372440
+1605596555
+1606809216
+1607394414
+1607854694
+1608335037
+1608539488
+1608576321
+1608694584
+1609002587
+1609565949
+1610623829
+1611356689
+1611470578
+1611604321
+1611895381
+1612113021
+1612332863
+1612460176
+1612551724
+1612590622
+1612693220
+1612712622
+1612834752
+1612873490
+1613896793
+1614939758
+1616724268
+1616786890
+1617161908
+1617659078
+1617756582
+1618130077
+1618516046
+1619190622
+1619572763
+1619741172
+1620341688
+1620353783
+1620634926
+1620724463
+1620803340
+1621616696
+1621946347
+1623567119
+1623593674
+1623671144
+1623889705
+1624110006
+1624274069
+1624301679
+1624753025
+1626063580
+1626101908
+1626451265
+1626463906
+1627142890
+1627323955
+1627640595
+1627983286
+1628223772
+1628382710
+1628556129
+1629619660
+1630127407
+1630379872
+1630662260
+1630783695
+1630931315
+1631494740
+1631902777
+1632676582
+1633902426
+1634012574
+1634429878
+1634780894
+1635041528
+1635373919
+1635496363
+1636145525
+1636217193
+1637021092
+1637028496
+1637115833
+1637239551
+1638157506
+1638793323
+1640000256
+1641870026
+1642100642
+1642127250
+1642395127
+1643291909
+1643409872
+1643984950
+1644414370
+1644615960
+1645646365
+1645777941
+1646090347
+1646230055
+1647369489
+1647625400
+1648305631
+1648971726
+1649000449
+1649158283
+1649191940
+1649318205
+1650868392
+1651457986
+1651802090
+1651829418
+1652136993
+1652372516
+1652901880
+1652932382
+1653667042
+1653805359
+1654263781
+1654373918
+1654446914
+1656574434
+1656939345
+1657352740
+1657727392
+1658664869
+1659089265
+1659481299
+1659720136
+1659990508
+1660338533
+1660533656
+1660551800
+1660824120
+1661088937
+1661923173
+1662002045
+1662214004
+1662302665
+1662868264
+1663279028
+1663604694
+1664194771
+1664340394
+1665149845
+1665178026
+1665256799
+1665704958
+1666623380
+1668788694
+1669498478
+1669576848
+1669635618
+1669834294
+1669935226
+1670709291
+1671401800
+1671777461
+1672135092
+1673037663
+1673383931
+1674412826
+1674560008
+1675751097
+1676466936
+1677006932
+1677870164
+1678534257
+1678619483
+1679901783
+1680097533
+1681324257
+1682007638
+1682240266
+1683227263
+1683334028
+1683923859
+1684126882
+1684240151
+1684388395
+1684817289
+1684936439
+1685203490
+1685685181
+1685702246
+1686392028
+1686408734
+1686696666
+1686807778
+1687323110
+1687378877
+1687476447
+1687880747
+1688168999
+1688241912
+1688912903
+1688934150
+1689693976
+1690836407
+1691061313
+1691692369
+1693341759
+1693460543
+1695102498
+1695207771
+1695396003
+1696232021
+1696467038
+1696632838
+1696935651
+1696949651
+1697405265
+1697638537
+1698098279
+1698545515
+1699174284
+1699965264
+1700304247
+1700702571
+1701588577
+1701683410
+1702257992
+1702834439
+1703379607
+1704129334
+1704161084
+1704264827
+1704412342
+1704737220
+1704906633
+1705364514
+1705610894
+1705754161
+1706247387
+1706502365
+1706965169
+1707575989
+1708164079
+1708390353
+1708409944
+1709107003
+1709341008
+1709729117
+1709809057
+1710642485
+1710730159
+1710914139
+1711225639
+1711643278
+1711825554
+1711978862
+1712284623
+1715597754
+1716064418
+1716437145
+1716641134
+1716798367
+1716828437
+1717152948
+1717683690
+1717711077
+1717768715
+1718019788
+1718571470
+1718938252
+1719081194
+1719089635
+1719846912
+1720161814
+1720252477
+1720719227
+1720834222
+1721002595
+1721499612
+1722108594
+1722312204
+1723158726
+1724688133
+1724889669
+1725027922
+1725050296
+1725325312
+1725337180
+1725355363
+1725453560
+1725664389
+1727128294
+1727208682
+1727703248
+1728440583
+1728502367
+1728567862
+1728868594
+1729402342
+1729639073
+1729894787
+1730226641
+1730241048
+1731589255
+1731818097
+1732129941
+1732629507
+1732688637
+1733248286
+1733462069
+1734272368
+1734387297
+1734789517
+1735274200
+1735624520
+1736612656
+1736679923
+1738088206
+1738175380
+1738255026
+1739519924
+1740513945
+1741554487
+1741931142
+1742375146
+1742986429
+1743032821
+1743041946
+1743765993
+1743836175
+1744431894
+1744985141
+1745809824
+1745879823
+1745901051
+1746167635
+1746417620
+1746624522
+1746647939
+1747373111
+1747922247
+1748773631
+1748916216
+1748993990
+1749012941
+1749104111
+1749317927
+1749717606
+1749997108
+1750165938
+1750774742
+1751045033
+1751165354
+1751236381
+1752243179
+1752586702
+1752597621
+1752687582
+1753111210
+1753327792
+1753396920
+1753922393
+1754101135
+1754857528
+1755703458
+1755975637
+1756190539
+1756455167
+1757509364
+1757626418
+1758631894
+1758791480
+1759034081
+1759229145
+1759571373
+1760007510
+1760864746
+1761681799
+1761951946
+1762683313
+1763620284
+1763762761
+1764331347
+1764888346
+1766085994
+1767064304
+1767159461
+1767685428
+1769417296
+1770931517
+1771900306
+1772045440
+1772597348
+1772727918
+1773513941
+1773526253
+1773949115
+1774061477
+1774480966
+1775244710
+1775529420
+1775944437
+1776226277
+1776391876
+1776567664
+1777715094
+1777924895
+1778615001
+1778809705
+1778830818
+1778919550
+1779459683
+1779537213
+1781208899
+1781335352
+1781351110
+1781395876
+1781446334
+1782127014
+1784121240
+1784282684
+1784916965
+1785138067
+1785388994
+1786541545
+1787045425
+1788551313
+1788665163
+1788834531
+1789660092
+1790605567
+1791057037
+1791088246
+1792961290
+1793307347
+1794723799
+1795731457
+1795773340
+1797029698
+1797100993
+1797682042
+1797828708
+1798528968
+1798767278
+1798935995
+1799355357
+1799896845
+1800802470
+1800849949
+1800863221
+1800879860
+1801752479
+1801954032
+1802275421
+1802466824
+1803300144
+1804116843
+1804157463
+1805218600
+1805994780
+1806007358
+1806523075
+1807555369
+1807686818
+1807887055
+1808006892
+1810261170
+1810323910
+1810596231
+1810919018
+1810971726
+1811124055
+1811415996
+1811918110
+1812634444
+1813962891
+1814048630
+1814082785
+1814093336
+1815135670
+1815256668
+1815580636
+1816638318
+1816771322
+1816775657
+1817933655
+1818081479
+1818229704
+1818317463
+1818638085
+1819226445
+1819423087
+1820085247
+1820350762
+1820877172
+1821432646
+1822325418
+1822536107
+1823280620
+1823398903
+1823472138
+1823936711
+1824121814
+1824901733
+1825160034
+1825640681
+1826112086
+1827170163
+1827806698
+1828338147
+1828547002
+1828621903
+1829306368
+1830657919
+1831643681
+1831935473
+1832050562
+1832386924
+1832599954
+1833174445
+1834106329
+1834545821
+1834778407
+1835458566
+1835489754
+1836033971
+1836677283
+1836930404
+1837137851
+1837521720
+1837536996
+1837669697
+1839012927
+1839444197
+1839611683
+1839650078
+1839956690
+1840419705
+1841431014
+1841616958
+1842375832
+1842739318
+1844044190
+1844773464
+1845239366
+1846573893
+1846763371
+1847864126
+1848047596
+1848096803
+1848217981
+1848558317
+1848625039
+1849333307
+1849615328
+1849869217
+1849981288
+1850045932
+1850869067
+1851670726
+1852483786
+1852556590
+1852729910
+1853198262
+1853316265
+1854513839
+1854698979
+1854995384
+1855107352
+1855128349
+1855246903
+1855738220
+1856252668
+1856402347
+1856577411
+1856701876
+1856981677
+1857007665
+1857151008
+1857209396
+1858368270
+1859132925
+1859234592
+1859350294
+1859942324
+1860470936
+1861516178
+1862196333
+1862825926
+1864383148
+1864749417
+1864854610
+1865534362
+1865625473
+1865629204
+1865752810
+1866886737
+1866969175
+1867021345
+1867087103
+1867487650
+1868509258
+1869617438
+1869757747
+1869852469
+1869930895
+1870294130
+1870606082
+1870999599
+1871195387
+1871473990
+1871513263
+1871555915
+1871888689
+1872251280
+1872303241
+1872367804
+1872435882
+1872748264
+1873484371
+1873735508
+1874779212
+1875030845
+1875151449
+1875618429
+1875641874
+1876054171
+1876273980
+1876302413
+1876708948
+1876972791
+1876986684
+1877466557
+1877476927
+1877776572
+1877973246
+1878763167
+1878916444
+1879714622
+1879830123
+1879840594
+1880083573
+1880219374
+1880266963
+1880684834
+1881437976
+1881659223
+1881824776
+1882334564
+1882449900
+1882519922
+1882883369
+1883594027
+1884194055
+1885107717
+1885564264
+1886163717
+1886291045
+1887593674
+1887625971
+1887962137
+1888169935
+1890202799
+1890434496
+1890458434
+1890471759
+1891450393
+1891938606
+1892620627
+1892773090
+1892851789
+1893320027
+1893551626
+1893938798
+1894437051
+1894467632
+1895234336
+1896655972
+1896703948
+1897416004
+1897461174
+1897841752
+1899179563
+1899911472
+1900422749
+1901150293
+1901286142
+1901684521
+1901693311
+1902443967
+1902530673
+1902610000
+1903268197
+1903334240
+1903947086
+1904680578
+1905003776
+1906091441
+1906744988
+1906948295
+1907674805
+1909025608
+1909105418
+1909259407
+1910729254
+1911352385
+1911668953
+1911883266
+1911996237
+1912312715
+1912392043
+1912402376
+1914173006
+1914805462
+1915183833
+1916499941
+1917270253
+1917868716
+1917983393
+1918145896
+1919334842
+1919368667
+1919822464
+1920949997
+1921073078
+1921860512
+1923633613
+1923651111
+1923867247
+1924049382
+1924219276
+1924263329
+1925550230
+1926126931
+1926271814
+1926276680
+1926834437
+1926952218
+1927643609
+1927982601
+1929568454
+1929716765
+1930006688
+1930067868
+1930263240
+1930670634
+1931507109
+1932097224
+1932172492
+1932558144
+1933025753
+1933029716
+1933610590
+1934328973
+1934979130
+1935690843
+1935926871
+1936388777
+1936683478
+1937793412
+1938068202
+1938559259
+1938769923
+1938871710
+1939121164
+1939660146
+1939677768
+1939908905
+1940240573
+1940355734
+1940818215
+1941089184
+1941253883
+1941326484
+1941375512
+1941755594
+1941857108
+1942006667
+1942514719
+1942817138
+1943019248
+1943080542
+1943285835
+1943786272
+1944684256
+1945010622
+1945653101
+1947343185
+1947644704
+1947645472
+1948397781
+1948508721
+1950080621
+1951003530
+1951171027
+1951298678
+1951731705
+1952071051
+1952585257
+1952834829
+1953148262
+1953253608
+1953678351
+1953862402
+1954215477
+1954497823
+1954621588
+1954940165
+1955158468
+1955486133
+1955998995
+1956027451
+1956150956
+1956189497
+1957695439
+1958074840
+1958304952
+1959016920
+1960031356
+1960619049
+1960792137
+1960834730
+1961413336
+1963047118
+1963062986
+1963313242
+1963496437
+1963542893
+1964218348
+1964400524
+1964576345
+1964642700
+1964696712
+1965312373
+1965621783
+1965686759
+1965731647
+1965765228
+1965857171
+1965973366
+1966026196
+1966939893
+1967510716
+1968289133
+1969700784
+1969900169
+1970534629
+1970701833
+1971659915
+1971989529
+1972881499
+1973396698
+1973506044
+1973932127
+1974483868
+1974694965
+1975437862
+1975905157
+1976219853
+1976558490
+1977302178
+1977450980
+1977536497
+1977937289
+1978301021
+1979087899
+1979578388
+1980016926
+1980337716
+1980646841
+1981183621
+1981371417
+1981545726
+1981736399
+1982132657
+1982143363
+1982990460
+1984593536
+1985353482
+1985526824
+1985576688
+1985860015
+1985923345
+1986983089
+1987224441
+1987492160
+1987893091
+1988026234
+1988082137
+1988395998
+1988599279
+1989002542
+1989406352
+1989588155
+1989660589
+1989903811
+1990214760
+1990512899
+1990561405
+1990601164
+1990750921
+1991182647
+1991223063
+1991900462
+1992224317
+1993029903
+1993409649
+1993551282
+1994020764
+1994111724
+1994616623
+1994832932
+1994849863
+1994895626
+1995053959
+1995209800
+1995575278
+1995912201
+1996017795
+1996273425
+1996293750
+1996482029
+1996724087
+1997150307
+1997711537
+1999417565
+1999514133
+1999617424
+1999989815
+2000264629
+2000852430
+2000905749
+2002317406
+2003052244
+2004427868
+2004521549
+2004674567
+2004717576
+2004755396
+2005662739
+2006234231
+2006542113
+2006664436
+2006859613
+2007129388
+2008135513
+2008231519
+2008297479
+2008705671
+2009093715
+2009144307
+2009542731
+2009594229
+2010157945
+2010613532
+2011830442
+2011836742
+2012561271
+2013818334
+2015480617
+2015508916
+2017147612
+2018004996
+2018082929
+2018221524
+2018411764
+2019015922
+2019381958
+2019850827
+2019881485
+2019889308
+2019922243
+2020104881
+2020344194
+2020566329
+2020964960
+2021375080
+2021654536
+2023512802
+2023584641
+2023650210
+2023667872
+2023786299
+2024335466
+2024789406
+2025138268
+2025468355
+2026053206
+2026631457
+2026696306
+2028067575
+2028083884
+2028186066
+2029008132
+2029062541
+2029135631
+2029394106
+2029682499
+2030538201
+2030546557
+2030693176
+2030721780
+2030755560
+2030967060
+2031868276
+2032785202
+2034429255
+2034760697
+2035793199
+2036213583
+2036368600
+2036720739
+2036729565
+2036800561
+2036931328
+2037023728
+2037047289
+2037434701
+2037692237
+2038678523
+2039075257
+2039187049
+2040071777
+2040085812
+2040538575
+2040661960
+2041434739
+2042590892
+2043029705
+2043370500
+2044657436
+2044912977
+2045613084
+2045947851
+2045981532
+2046782416
+2047316079
+2047349771
+2047556080
+2047596899
+2048771848
+2049034201
+2050822168
+2051016130
+2051618702
+2051888047
+2052310884
+2053373807
+2053539319
+2054022934
+2054454711
+2054531193
+2054813429
+2054942583
+2055508928
+2055687936
+2055961208
+2056078309
+2056133789
+2056482448
+2057247340
+2058697835
+2058733066
+2059222632
+2059301627
+2059314113
+2060215561
+2060222195
+2061586266
+2062238406
+2062267530
+2062581293
+2063077839
+2063484160
+2064314127
+2064412886
+2064677140
+2064939658
+2065321903
+2065865598
+2066324166
+2067333631
+2067989078
+2068103720
+2068211350
+2068838966
+2069255121
+2069514737
+2069612028
+2070013519
+2070793361
+2070910709
+2071372250
+2072228968
+2072361357
+2072463153
+2072685330
+2072845735
+2073143486
+2073234604
+2073838780
+2074186680
+2074924868
+2075121332
+2076327327
+2077530401
+2077673429
+2077767062
+2077973382
+2077992558
+2078463623
+2079390297
+2081246494
+2081455933
+2083231247
+2083567021
+2083667949
+2083840400
+2083901477
+2084914505
+2085186814
+2085351227
+2085359463
+2085559236
+2086364211
+2086600101
+2086686071
+2086759949
+2086902125
+2087011478
+2087437620
+2088002948
+2088232093
+2089032361
+2089037301
+2089045838
+2089509928
+2090135076
+2090646522
+2091430104
+2091731653
+2092786502
+2093355845
+2093415285
+2093485019
+2093679262
+2093953144
+2094552525
+2094838163
+2094972873
+2095130820
+2095933459
+2096452685
+2096943684
+2096981306
+2097021356
+2097069470
+2097092655
+2097324486
+2097543312
+2097661337
+2098515604
+2098883054
+2099505211
+2100586234
+2100680390
+2101728267
+2101786958
+2101813227
+2101959098
+2102620348
+2103350686
+2103358773
+2105538380
+2105643910
+2105740111
+2105876470
+2105939593
+2106231904
+2106284126
+2106605258
+2107430649
+2107487959
+2107574368
+2108003703
+2108589845
+2108637057
+2109039432
+2109200040
+2109439608
+2109898746
+2110231133
+2110421432
+2110431767
+2110555493
+2110963014
+2112175814
+2112230825
+2113048214
+2113742463
+2114216213
+2115475454
+2116237109
+2116380534
+2116580646
+2116698199
+2117065428
+2117413385
+2117897021
+2117968956
+2118011971
+2118245840
+2118423299
+2118630673
+2118915013
+2119242313
+2119720030
+2120188945
+2120267309
+2120362440
+2120902325
+2121338287
+2121583717
+2121683104
+2122043835
+2122383591
+2122546831
+2122643455
+2122959929
+2123941399
+2124365775
+2124811600
+2125160248
+2125976646
+2126114860
+2126434841
+2127064051
+2127190965
+2127489821
+2127576942
+2127630486
+2128181621
+2128300159
+2129191953
+2130865065
+2131425304
+2131482918
+2132276589
+2132457051
+2132524920
+2133450108
+2134330556
+2134640504
+2134642942
+2135237221
+2135558165
+2135590337
+2135957319
+2137428859
+2138134161
+2139177213
+2139458518
+2139467983
+2139596187
+2140121919
+2140273489
+2140677150
+2140703928
+2141089035
+2141625512
+2141881298
+2142352763
+2143138053
+2143839853
+2144093591
+2145324751
+2146615346
+2147023368
+2147096847
diff --git a/src/main.cu b/src/main.cu
index aa205d9..c222bb8 100644
--- a/src/main.cu
+++ b/src/main.cu
@@ -1,26 +1,208 @@
 #include <stdio.h>
 #include <stdlib.h>
+#include <stdint.h>
 #include <math.h>
+#include <chrono>
 
-void rng(int *arr, int n)
+// 2 bucket radix search
+
+void rng(uint64_t *arr, int n)
 {
   int seed = 13516032;
   srand(seed);
   for (int i = 0; i < n; i++)
   {
-    arr[i] = (int)rand();
+    arr[i] = (uint64_t)rand();
   }
 }
 
+__global__
+void flag_array(uint64_t *arr, int n, int *flag, int idx) {
+  int index = blockIdx.x * blockDim.x + threadIdx.x;
+  int stride = blockDim.x * gridDim.x;
+
+  for(uint64_t i = index; i < n; i += stride) {
+    // flag[i] = (arr[i] & (1 << idx));
+    flag[i] = (arr[i] >> idx) & 1;
+  }
+}
+
+__global__
+void count_hist(int *flag, int n, int* count) {
+  int index = blockIdx.x * blockDim.x + threadIdx.x;
+  int stride = blockDim.x * gridDim.x;
+
+  for(int i = index; i < n; i += stride) {
+    if(flag[i]) {
+      atomicAdd(count + 1, 1);
+    } else {
+      atomicAdd(count, 1);
+    }
+  }
+}
+
+__global__
+void inc_prefix_sum(int *inc_prefix, int n, int step, int *result_inc_prefix) {
+  int dist = 1 << step;
+
+  int index = blockIdx.x * blockDim.x + threadIdx.x;
+  int stride = blockDim.x * gridDim.x;
+
+  for(int i = index; i < n; i += stride) {
+    result_inc_prefix[i] = inc_prefix[i];
+    if(i - dist >= 0) {
+      result_inc_prefix[i] += inc_prefix[i - dist];
+    }
+  }
+}
+
+__global__
+void reverse_bit(int *dist, int *source, int size) {
+  int index = blockIdx.x * blockDim.x + threadIdx.x;
+  int stride = blockDim.x * gridDim.x;
+
+  for(int i = index; i < size; i += stride)
+    dist[i] = source[i] == 1 ? 0 : 1;
+}
+
+__global__
+void calc_res_index(uint64_t *arr, int *flag, int *inc_prefix, int *rev_inc_prefix, int size, int *count, uint64_t *res_arr) {
+  int index = blockIdx.x * blockDim.x + threadIdx.x;
+  int stride = blockDim.x * gridDim.x;
+
+  for(int i = index; i < size; i += stride) {
+    int pref = 0;
+    if(i > 0)
+      if(flag[i] == 1) {
+        pref = inc_prefix[i - 1];
+      } else {
+        pref = rev_inc_prefix[i - 1];
+      }
+    
+    int c = flag[i] == 0 ? 0 : count[0];
+
+    int res_index = c + pref;
+    res_arr[res_index] = arr[i];
+  }
+}
+
+__global__
+void simple_copy(uint64_t *dist, uint64_t *source, int size) {
+  int index = blockIdx.x * blockDim.x + threadIdx.x;
+  int stride = blockDim.x * gridDim.x;
+
+  for(int i = index; i < size; i += stride)
+    dist[i] = source[i];
+}
+
+void radix_sort(uint64_t *arr, int n) {
+  int block_size = 256;
+  int num_block = (n + block_size - 1) / block_size;
+  // int block_size = 1;
+  // int num_block = 1;
+
+  // determine largest item
+  uint64_t max = arr[0];
+  for(uint64_t i = 0; i < n; i++)
+    if(arr[i] > max)
+      max = arr[i];
+    
+  uint64_t* d_arr;
+  cudaMallocManaged(&d_arr, n * sizeof(uint64_t));
+  cudaMemcpy(d_arr, arr, n * sizeof(uint64_t), cudaMemcpyHostToHost);
+
+  int* flag;
+  cudaMallocManaged(&flag, n * sizeof(int));
+
+  int* count;
+  cudaMallocManaged(&count, 2 * sizeof(int));
+
+  int* inc_prefix, *result_inc_prefix;
+  cudaMallocManaged(&inc_prefix, n * sizeof(int));
+  cudaMallocManaged(&result_inc_prefix, n * sizeof(int));
+
+  int* rev_inc_prefix, *result_rev_inc_prefix;
+  cudaMallocManaged(&rev_inc_prefix, n * sizeof(int));
+  cudaMallocManaged(&result_rev_inc_prefix, n * sizeof(int));
+
+  uint64_t* res_arr;
+  cudaMallocManaged(&res_arr, n *sizeof(uint64_t));
+
+  for(uint64_t idx = 0; ((1 << idx) <= max) && (idx < 64); idx += 1) {
+    // computer flag and reverse flag
+    flag_array<<<num_block, block_size>>>(d_arr, n, flag, idx);
+    cudaDeviceSynchronize();
+
+    cudaMemcpy(inc_prefix, flag, n * sizeof(int), cudaMemcpyDeviceToDevice);
+    reverse_bit<<<num_block, block_size>>>(rev_inc_prefix, flag, n);
+    cudaDeviceSynchronize();
+
+    // count histogram from flag
+    cudaMemset(count, 0, 2 * sizeof(int));
+    count_hist<<<num_block, block_size>>>(flag, n, count);
+    cudaDeviceSynchronize();
+
+
+    // inclusive prefix sum
+    // inc_prefix -> 1
+    // rev_inc_prefix -> 0
+
+    for(int step = 0; (1 << step) < n; step++) {
+      inc_prefix_sum<<<num_block, block_size>>>(inc_prefix, n, step, result_inc_prefix);
+      cudaDeviceSynchronize();
+      
+      inc_prefix_sum<<<num_block, block_size>>>(rev_inc_prefix, n, step, result_rev_inc_prefix);
+      cudaDeviceSynchronize();
+
+      cudaMemcpy(inc_prefix, result_inc_prefix, n * sizeof(int), cudaMemcpyDeviceToDevice);
+      cudaMemcpy(rev_inc_prefix, result_rev_inc_prefix, n * sizeof(int), cudaMemcpyDeviceToDevice);
+    }
+
+    // for(int i = 0; i < n; i++)
+    //   printf("i %d f %d %d\n", i, inc_prefix[i], rev_inc_prefix[i]);
+
+    calc_res_index<<<num_block, block_size>>>(d_arr, flag, inc_prefix, rev_inc_prefix, n, count, res_arr);
+    cudaDeviceSynchronize();
+    // for(int i = 0; i < n; i++) {
+    //   printf("i %d darr %d res %d\n", i, d_arr[i], res_arr[i]);
+    // }
+    simple_copy<<<num_block, block_size>>>(d_arr, res_arr, n);
+    cudaDeviceSynchronize();
+    // printf("===\n");
+  }
+
+  cudaMemcpy(arr, d_arr, n * sizeof(uint64_t), cudaMemcpyHostToHost);
+  cudaFree(inc_prefix);
+  cudaFree(res_arr);
+  cudaFree(result_inc_prefix);
+  cudaFree(rev_inc_prefix);
+  cudaFree(result_rev_inc_prefix);
+  cudaFree(d_arr);
+  cudaFree(flag);
+  cudaFree(count);
+}
+
 int main(void)
 {
-  int N = 8;
-  int *arr;
 
-  cudaMallocManaged(&arr, N * sizeof(int));
+  int N = 5000;
+  uint64_t *arr;
+
+  arr = (uint64_t*)malloc(N * sizeof(uint64_t));
 
   rng(arr, N);
 
-  cudaFree(arr);
+  auto start_time = std::chrono::high_resolution_clock::now();
+  radix_sort(arr, N);
+  auto elapsed = std::chrono::high_resolution_clock::now() -start_time;
+  auto microsecs = std::chrono::duration_cast<std::chrono::microseconds>(elapsed).count();
+
+  for(int i = 0; i < N; i++) {
+    printf("%d\n", arr[i]);
+  }
+
+  fprintf(stderr, "time: %lld us\n", microsecs);
+
+  free(arr);
   return 0;
 }
\ No newline at end of file
-- 
GitLab