From e3483f9a61970fcda06a51b6b181ac4851bf3e2a Mon Sep 17 00:00:00 2001
From: jasonwiguna <jason.wiguna01@gmail.com>
Date: Thu, 11 Apr 2019 21:36:05 +0700
Subject: [PATCH] add makefile and readme

---
 README.md      | 106 ++++++++++++++++++++++++++++++++++++++++++++++++
 makefile       |  11 +++++
 output.txt     |   1 +
 radix          | Bin 0 -> 9100 bytes
 radix_serial.c | 107 +++++++++++++++++++++++++++++++++++++++++++++++++
 5 files changed, 225 insertions(+)
 create mode 100644 README.md
 create mode 100644 makefile
 create mode 100644 output.txt
 create mode 100755 radix
 create mode 100644 radix_serial.c

diff --git a/README.md b/README.md
new file mode 100644
index 0000000..761aec2
--- /dev/null
+++ b/README.md
@@ -0,0 +1,106 @@
+# PARALLEL OPEN MPI
+##### Jason Wiguna / 13516024
+##### Eric Jonathan / 13516117
+
+## Cara menjalankan program
+
+## Untuk radix cuda
+make radix
+
+./<executable-name> <array-size>
+./radix 5000
+
+## Untuk radix serial
+make serial_radix
+
+./<executable-name> <array-size>
+./radix 5000
+
+## Pendahuluan
+> Radix Sort adalah metode/algoritma pengurutan dengan cara Non-Camparation (pengurutan tanpa perbandingan). Prosesnya dengan cara melakukan perhitungan count jumlah digit terhadap suatu digit dari least significant digit ke most significant digit.
+
+> Secara harfiah Radix dapat diartikan sebagai posisi dalam angka, karena cara ini pertama kalinya mengurutkan nilai-nilai yang dimasukan (input) berdasarkan radix pertamanya, lalu pengurutan dilakukan berdasarkan radix keduanya, dan begitu seterusnya. Pada sistem desimal, radix adalah digit dalam angka desimal. Kelebihan yang dimiliki Radix Sort antara lain adalah merupakan algoritma pengurutan yang cepat, mudah, dan sangat efektif. Namun penggunaannya terbatas pada kasus-kasus tertentu dan memerlukan memori tambahan dalam prosesnya.
+
+
+## Deskripsi Solusi
+> Parallel Radix Sort diimplementasikan dengan Cuda.
+Langkah-langkah algoritma Radix Sort:
+1. Untuk setiap elemen pada array, kita mulai dengan membandingkan digit ke i dimulai dari Least Significant Digit (LSD) hingga Most Significant Digit (MSD)
+2. Urutkan setiap elemen array dengan counting sort dengan mengacu pada digit ke i
+3. Pada counting sort, penentuan digit yang sedang diamati diparalelkan
+3. Lanjutkan untuk digit i+1 sampai MSD
+
+
+### Hasil pengukuran kinerja
+##### Serial Radix Sort:
+N = 5000
+- 509.822 ms
+- 468.84 ms
+- 494.61 ms 
+
+N = 50000
+- 1708.74 ms
+- 2475.64 ms
+- 2425.741 ms
+
+N = 100000
+- 3013.129 ms
+- 2960.172 ms
+- 3004.044 ms
+
+N = 200000
+- 5808.667 ms
+- 4967.901 ms
+- 5794.948 ms
+
+N = 400000
+- 11725.552 ms
+- 11623.837 ms
+- 11588.134 ms
+
+##### Parallel Radix Sort
+N = 5000
+- 4027.95 ms
+- 4201.77 ms
+- 3960.7 ms 
+
+N = 50000
+- 37660.1 ms
+- 37788.6 ms
+- 26199.7 ms
+
+N = 100000
+- 68535.9 ms
+- 52493.6 ms
+- 74647 ms
+
+N = 200000
+- 123225 ms
+- 130053 ms
+- 103735 ms
+
+N = 400000
+- 224817 ms
+- 541991 ms
+- 281540 ms
+
+### Analisis Hasil
+>Pada algoritma Radix Sort, dapat diimplementasikan secara serial maupun parallel.
+Dari hasil pengukuran kinerja yang sudah dilakukan dapat disimpulkan bahwa pemilihan solusi secara serial atau paralel memiliki kelebihan dan kekurangannya masing-masing.
+
+>Berdasarkan hasil percobaan dapat dilihat bahwa algoritma serial menghasilkan hasil yang lebih cepat dibanding paralel. Hal ini mungkin terjadi karena kesalahan optimasi bagian yang seharusnya diparalelkan oleh penulis karena komunikasi antar proses yang cukup menyita waktu. Seharusnya ketika ruang persoalan diperbesar, kinerja paralel menjadi semakin baik. Hal ini juga mungkin terjadi karena kesalahan penggunaan jumlah thread yang dilakukan.
+
+## Jumlah Thread
+> Pada pengetesan penulis menggunakan thread berjumlah 1.
+
+### Pembagian Kerja
+Jason Wiguna - 13516024
+- Counting Sort logic
+- Parallel set up
+- Radix Sort Logic
+
+Eric Jonathan - 13516117
+- Radix Sort logic
+- Makefile
+- Testing
+- Readme
diff --git a/makefile b/makefile
new file mode 100644
index 0000000..8368f2b
--- /dev/null
+++ b/makefile
@@ -0,0 +1,11 @@
+CC = nvcc
+CC2 = gcc
+FILENAME = radix.cu
+FILENAME2 = radix_serial.c
+EXECUTABLE = radix
+
+radix: radix.cu
+	$(CC) $(FILENAME) -o $(EXECUTABLE)
+
+serial_radix: radix_serial.c
+	$(CC2) $(FILENAME2) -o $(EXECUTABLE)
\ No newline at end of file
diff --git a/output.txt b/output.txt
new file mode 100644
index 0000000..8e1ac91
--- /dev/null
+++ b/output.txt
@@ -0,0 +1 @@
+84106, 116586, 731090, 1059679, 1191534, 1889620, 1920006, 1953482, 2272622, 4142371, 4361617, 4495607, 4819820, 5424223, 5468594, 6238943, 6560753, 6648256, 6846690, 7409022, 8640824, 8690180, 8721066, 8773733, 8936180, 10000655, 10058179, 10062347, 10388146, 11098523, 11153631, 12081465, 12951580, 13203646, 13466852, 13738642, 14267707, 14987024, 15693022, 15880785, 16917508, 16946055, 17231199, 17571721, 18668532, 19131434, 20481886, 20795521, 20891080, 21827204, 21859762, 22314566, 22343985, 22886383, 23424112, 23475295, 23529188, 24110905, 24254610, 24739888, 25054686, 25366399, 25652731, 25982429, 26248861, 26967264, 27405311, 27646147, 28012116, 28666973, 28769990, 28778091, 28839082, 29234810, 29345119, 29988644, 30038126, 30406967, 30554635, 30619686, 30688402, 30701895, 31261898, 31494135, 31531419, 31708882, 32066689, 32554132, 32994772, 34158419, 34310848, 35047952, 35136951, 35875699, 36085189, 36437009, 36756081, 37146342, 37459998, 37832271, 38020013, 38362798, 38507536, 38753573, 38980674, 39215134, 39287644, 39596573, 39839776, 39892374, 40265298, 40759362, 40943422, 41721755, 42533992, 42559127, 42685903, 43244946, 43717303, 43947810, 44030289, 44265631, 44987947, 45089869, 45779769, 46359711, 47001509, 47126714, 47249456, 47365279, 47371108, 47446856, 47611799, 47836792, 49565977, 50153607, 51083072, 51386863, 51743713, 52725333, 52825554, 53325130, 53409431, 53560216, 55143717, 56059124, 56086610, 56433283, 56855932, 57129218, 57286137, 57701776, 58011051, 58097763, 58112692, 58232178, 58420356, 59198723, 59308581, 59745285, 59872241, 60470790, 60792666, 61113405, 61288750, 62608164, 63051364, 63420620, 63505866, 63583515, 64139521, 64175505, 64177499, 64452170, 64992638, 65362231, 65497359, 65566486, 65703447, 65727007, 65796972, 66289339, 66568746, 66605551, 67307364, 67640390, 67699552, 68055393, 68059319, 68088948, 68274250, 69970967, 71121543, 71237551, 71610136, 71701763, 71702648, 72415335, 72679818, 73095276, 73507614, 73967843, 74607946, 75306623, 75817688, 75911167, 76243163, 76622815, 77033033, 78014844, 78251459, 79563735, 81506255, 81830801, 83070887, 83239209, 83293900, 83422099, 84182643, 85087984, 85190242, 85443251, 85868718, 86041102, 86056564, 86532642, 86736265, 87483150, 88038390, 89081898, 89413454, 89995260, 90209731, 90260749, 90670109, 90873267, 91226704, 92010696, 92941627, 93005447, 93264606, 94058781, 94221106, 95319298, 95375821, 95548259, 95680842, 95787857, 97209785, 97371484, 97416002, 98152105, 98243998, 98361657, 98908807, 99735302, 99773211, 99876057, 100097780, 100165114, 101338225, 101519297, 101584538, 102090091, 102240247, 102688180, 102739916, 102947296, 103269378, 103629589, 103995677, 104386234, 104788460, 105965589, 106448251, 106537980, 106578689, 107471471, 107629216, 107648688, 107815957, 107956334, 108211478, 108422467, 108952509, 108985195, 109085370, 109128099, 109164011, 110516459, 110817791, 112458776, 112498007, 113200671, 113529089, 114588953, 115368804, 115719249, 115908812, 117414237, 117419925, 117841222, 118145000, 118619221, 119756531, 119856393, 119936817, 121037714, 121727553, 122701645, 123002347, 123953769, 124056382, 124390958, 124477354, 124479704, 124981957, 125098849, 125295534, 125325855, 125389886, 125492626, 125948963, 126679312, 126788677, 126805263, 126903173, 127547867, 127769403, 127855215, 128841804, 129002846, 129184345, 130444646, 131602315, 131993594, 132614089, 134161725, 134400358, 135756099, 135798403, 136273412, 136824795, 137425224, 137542391, 138154146, 138411432, 138580352, 138696754, 139817452, 139965207, 139992574, 140232581, 140780152, 140800809, 140976548, 141950529, 142009206, 142258521, 142530843, 142971521, 143395686, 143420393, 143633042, 143789294, 144499669, 144619173, 144816248, 144963585, 145013787, 145111883, 146668167, 146905963, 147340896, 147555591, 147601349, 148664563, 149495614, 149502068, 149864730, 150093135, 150722295, 150736044, 151657648, 152159943, 153195149, 153358482, 154159252, 154436776, 155075665, 155120571, 155300837, 155558383, 155576522, 155815161, 156194774, 156944467, 156979193, 157104840, 157124207, 159604891, 159766296, 159854164, 160123726, 160383423, 160422183, 161071962, 161546239, 161851007, 162050307, 162433623, 162434891, 162494998, 163749520, 164925355, 165262141, 165274090, 165675583, 165940529, 165945261, 166204664, 166361804, 166568350, 166859566, 166891951, 167201733, 167548322, 169323243, 169742440, 170072024, 170073978, 170359856, 170830759, 171358394, 172015663, 172061311, 172623698, 172916024, 173133034, 174060222, 175344272, 175870349, 175953487, 176334374, 177316297, 178406611, 178746184, 179031042, 179193038, 179875006, 181075784, 181741267, 182595938, 182780246, 183577254, 183708781, 185052719, 186138708, 186187567, 186574787, 187312790, 187349669, 187356048, 187651221, 187959340, 188888708, 188950256, 189328047, 189865418, 189935317, 190721071, 190782647, 190904783, 191819185, 192126637, 192163532, 192513258, 193422135, 195162874, 195634842, 196011643, 196119263, 196455521, 196525371, 196906042, 197056861, 197832974, 198037314, 198181485, 198624240, 199019624, 199203900, 199354775, 199769033, 199957701, 200411124, 200443081, 200655893, 200820820, 201180589, 201282773, 201523650, 202563260, 203044581, 203473411, 204043108, 204192766, 204571148, 205802044, 207463330, 207662622, 207704736, 207976471, 208324689, 208894865, 209113541, 209810361, 210240525, 210312568, 210394077, 211021827, 211134781, 212381512, 213095232, 214037000, 215408019, 215534352, 215801402, 216068660, 216224002, 217334822, 218679986, 218757784, 219080978, 219496516, 221137691, 221876606, 222396651, 223624362, 224190542, 224216141, 224370216, 224997745, 225212645, 225489026, 226042398, 226391532, 227543084, 227560590, 227998009, 229363302, 229404862, 229465885, 229511671, 229645215, 229701376, 230212986, 230434169, 230661431, 230746277, 231362985, 231474513, 231557758, 231567959, 231857993, 231859518, 231962638, 232093591, 232125054, 232496301, 232919350, 233094242, 233697451, 234662841, 234923472, 235090140, 235353040, 235541832, 235835784, 236349334, 236832957, 237015504, 237189049, 237235126, 237325937, 237343797, 237357794, 237433617, 237566992, 237647879, 237759420, 237926990, 238184982, 238452810, 239238033, 239265970, 239710945, 240165428, 240898679, 241109600, 241126652, 241485157, 242553255, 242580144, 242734216, 243056680, 243686703, 244060940, 244448080, 244538868, 244957331, 245576717, 246002905, 246410838, 246918417, 246956945, 247071590, 247938070, 248259553, 248283177, 248365863, 249876327, 250648976, 250835822, 251209493, 251705633, 251722490, 251866268, 252512536, 253367781, 254902594, 256833711, 256922707, 257148658, 257169186, 257542290, 258141379, 258655186, 259165737, 259168789, 259669954, 260058767, 260480212, 261248010, 261737046, 261756312, 262101248, 262399237, 262889170, 263206176, 263478743, 264085622, 264376555, 265474466, 266068751, 266664425, 266810300, 266952348, 267171351, 267604507, 268638652, 268917666, 268993087, 269217085, 269629350, 269661960, 269668266, 269829196, 271417214, 271710818, 272060582, 272327934, 272427420, 272530080, 273518449, 273968171, 276161463, 276495846, 276548626, 277138924, 277264558, 277706655, 277760617, 278402523, 280336044, 280755746, 281514681, 281543671, 282771896, 282796552, 283158812, 284330493, 284593655, 284657474, 284750275, 284980965, 285480595, 286663602, 287261293, 287324991, 287609179, 287658352, 288145779, 288296328, 289012875, 289103129, 289515377, 289649560, 289673880, 290483668, 290550102, 290629484, 290863158, 291004802, 291252921, 291280470, 291825180, 292144825, 292219673, 292447177, 293139443, 293707662, 294318798, 295100394, 296448529, 296873510, 297597377, 297638572, 297968075, 299061377, 299603835, 299817801, 300270282, 301073385, 301579472, 301632298, 302663849, 304285513, 305036863, 305316822, 305689666, 305700634, 305743726, 306042911, 306201350, 307895710, 308027259, 308207908, 308950971, 308959411, 309038872, 309519435, 309794081, 309986474, 310094519, 310481122, 310960238, 311468217, 311617461, 311735455, 311863979, 311954198, 312576346, 312704568, 313179443, 313998275, 314068236, 314350542, 314454029, 314455302, 316819291, 316972598, 317076384, 317304247, 317448930, 317756571, 318071668, 318327786, 318522270, 318732134, 318852380, 319313401, 319753192, 320329152, 321319331, 321531308, 321628847, 322975021, 324003769, 324185952, 324497198, 324710865, 324926072, 324994502, 325087829, 325332824, 325421129, 325623828, 325983231, 326273572, 326378672, 327093095, 327104997, 327790373, 327820210, 328358866, 328784436, 329297187, 329976172, 330721559, 330991687, 331000435, 331297544, 332370434, 332408503, 332476056, 332590690, 332744533, 332909994, 333587694, 334629718, 334857164, 335128853, 335351359, 335664119, 335757892, 335801950, 336503285, 336515795, 336835358, 337194691, 337585337, 337646889, 337741650, 337986418, 338018202, 338573646, 338876306, 339377475, 339835600, 340169988, 340426767, 342048133, 342946802, 343486961, 343996879, 344032723, 344700894, 345039166, 345254795, 345909219, 346236529, 346890748, 348480993, 350133447, 350399777, 350629353, 350894192, 351428899, 351705411, 352110640, 352302094, 352584966, 353204774, 353401355, 355235318, 355562964, 355906350, 356373889, 357834387, 358269884, 358279880, 358750142, 358793102, 358811117, 359516339, 360201735, 360976565, 361967138, 362298023, 362398602, 362693349, 363970868, 364028091, 364093316, 364913729, 364992640, 365340401, 365936534, 366908659, 366943975, 367443098, 367494343, 367591673, 368078969, 369061143, 369286329, 370148835, 370580347, 370764890, 370922721, 371513233, 372044330, 372207290, 372759890, 372889687, 373033010, 374177657, 374473844, 374629733, 374987839, 375209242, 375222958, 375407706, 375752841, 375776847, 376142945, 376203872, 376908827, 377469694, 377477815, 377971667, 378110829, 378250870, 378394105, 378511166, 378584048, 378590973, 380760708, 381058075, 381184408, 381728023, 383307242, 383783307, 383897134, 384171840, 384386514, 384921666, 385396854, 385406959, 385554025, 385958391, 386387889, 386614485, 387087449, 387478719, 388082697, 388181873, 388268496, 388386991, 388459318, 389351874, 389693435, 389949343, 390084366, 390144462, 390389477, 390902219, 391102492, 391121523, 392260358, 392426380, 392701712, 392849498, 393529784, 393537368, 393681528, 393831832, 394340442, 394426111, 395164219, 395739204, 396266593, 396509570, 396673981, 397301246, 397654074, 397891122, 398741091, 399692030, 399773986, 399912826, 400431214, 400795447, 400944576, 402121482, 402453191, 402818209, 402912254, 402925388, 403357727, 403560368, 403918067, 404045108, 404362643, 404492044, 404592121, 404648645, 405793246, 405989444, 406647695, 407425331, 407847859, 407977143, 408768630, 408988863, 409600368, 409836304, 410017076, 410367140, 410629979, 411532714, 412028132, 412217398, 412239966, 412423994, 412900156, 413315597, 413393978, 414296591, 414556394, 414651529, 415454634, 415458244, 416587053, 416601362, 416972486, 417530181, 417867853, 417907572, 418211246, 419047776, 419321196, 419458543, 419479908, 420190369, 420361794, 420641755, 421653748, 421878017, 422305821, 422749692, 423488947, 423532109, 423559984, 424210475, 424920566, 424968414, 425076592, 426098039, 426274231, 426316361, 427282825, 427289460, 427407732, 427473925, 428184984, 429225542, 430768117, 430988510, 431215592, 431637546, 431665646, 431721144, 431946869, 432111089, 432172698, 432463590, 432739850, 434048627, 435450966, 435834391, 435865820, 436320489, 436880896, 437491405, 437907226, 437920605, 438159839, 438855171, 439840809, 439870612, 440180233, 441816500, 442070803, 442838342, 443481011, 444304347, 445381534, 446125452, 446243331, 446365242, 446882862, 447255051, 447695363, 447964017, 448164547, 448457396, 449007357, 449112289, 449910718, 450791206, 450882054, 451065951, 451092510, 451290386, 451758892, 453180223, 453849470, 453971671, 454273909, 455143902, 456231954, 456598545, 457244621, 457312995, 457392558, 457621963, 458011304, 458049662, 459077953, 460902539, 461739066, 462256284, 462555080, 463813388, 464687824, 464798500, 465275798, 465350479, 465970283, 466008424, 466453820, 467132283, 467573742, 467946086, 468894984, 469088746, 469990280, 470555281, 470896613, 470938652, 471239171, 471892368, 471954842, 472213376, 472834406, 473302416, 473384132, 474613907, 474856894, 474980147, 475240913, 475455108, 475575332, 475800865, 476491174, 476590107, 477611286, 477933055, 478293016, 478621720, 478700500, 478992738, 479650103, 479787774, 479913944, 480289113, 480592294, 481214105, 481312950, 481649270, 481816247, 482394854, 483113632, 484114621, 485470746, 485531877, 485956813, 486046513, 486188725, 486550637, 486754065, 487158753, 487765803, 487823722, 488590282, 488829472, 489006105, 489554862, 489616723, 489639296, 490869939, 491411847, 491703244, 491870530, 491883101, 491890801, 492352078, 492429635, 494586349, 494616171, 496070154, 497166217, 497174693, 497424283, 497922307, 498103585, 499637479, 500714919, 500798661, 501034996, 501262361, 501770353, 502059457, 503374923, 503555301, 504591530, 505295226, 506058089, 506751574, 506818770, 507685075, 507887471, 508017472, 508160005, 508249751, 508320963, 510769226, 510945271, 511195620, 511275078, 513736274, 514277224, 514616536, 514879153, 515209773, 515471422, 515630574, 515711070, 516250028, 516814589, 517470645, 517727990, 517771148, 518073684, 518451886, 518687982, 519238355, 519465622, 519783385, 520053248, 520116494, 520637830, 520919045, 521773958, 522024485, 522184793, 523549738, 523922337, 524175060, 524384836, 524433313, 524761579, 524964995, 525276734, 526496202, 526909415, 527066508, 528296449, 528693208, 528879079, 528979679, 529312966, 529517211, 529567629, 529771799, 529875445, 530116823, 531104911, 532088148, 532897614, 533223147, 533343150, 534416168, 534470890, 534794199, 535109250, 535606531, 536134332, 536257795, 536322778, 536568007, 539348252, 539530782, 539724166, 540204464, 540806491, 540938513, 541878282, 542208500, 542952555, 543053761, 543103588, 543606044, 543808716, 544115856, 544918391, 545274052, 545589219, 546068266, 546185082, 546516527, 546745352, 546752690, 546769847, 547004236, 547447620, 548138169, 548321246, 548939703, 549168871, 549233716, 549242660, 549310391, 550506080, 550820659, 550870342, 550914289, 551836006, 552167900, 552636011, 552744035, 553021491, 553330383, 554245826, 554259179, 554800595, 555839278, 556147923, 557070634, 557423940, 557658798, 557779911, 557998293, 558267938, 560070078, 560336467, 560815409, 560921741, 561598638, 562085885, 562862525, 563499784, 564805946, 565077190, 565089043, 565804130, 567066105, 568248624, 568367908, 568896684, 569379920, 569621527, 569680922, 569707209, 570186424, 570245353, 571203832, 571378002, 572802499, 572872835, 573114853, 573232414, 573421649, 573750414, 573907139, 574399516, 574485320, 574642668, 574774253, 574860381, 575946792, 576245348, 577284119, 577495620, 577797724, 578292975, 578962940, 579157556, 579484810, 579740863, 579977713, 580338653, 580597253, 580755122, 581908277, 583554975, 583655856, 584538357, 584778984, 585328815, 586098329, 586146174, 586723411, 586805448, 587000370, 587650949, 587718628, 587802246, 587888723, 588310531, 588600519, 588741147, 589384332, 590697004, 590780931, 591481276, 591497700, 591524039, 591667415, 592739865, 592796911, 592893558, 593892767, 594374979, 594434899, 595172740, 595846550, 596114121, 596932791, 597413901, 597680301, 598052540, 598154771, 599438611, 600041937, 600448248, 600515570, 602811543, 602943467, 602967539, 603034401, 603181320, 604496189, 604619615, 604725402, 604753166, 605116132, 605610002, 606035382, 606582633, 607144832, 608031112, 609277394, 609434747, 609529432, 610041985, 610526700, 610673985, 610825920, 610976347, 611797885, 612424179, 613845489, 615252594, 616334771, 616736982, 617110208, 617401170, 619014846, 619039221, 619612024, 619680376, 619718474, 619794728, 619917269, 620372834, 620381267, 620659724, 621221220, 621431957, 622214361, 622325718, 622519410, 622626255, 623192682, 623554929, 624632529, 624727377, 624744357, 624990017, 626125404, 626690657, 627433784, 627561286, 627775265, 627891491, 627998928, 628504204, 628688891, 629387719, 629433857, 629554447, 630155777, 630158577, 630361787, 631022378, 631325669, 631512253, 631669253, 632407692, 632747423, 633267857, 633516515, 633586637, 634422265, 635258497, 635520002, 635814569, 636437573, 636918428, 637339301, 637686702, 637730435, 638751929, 638783755, 639371473, 639429191, 640250563, 640409986, 641315729, 641674482, 641845217, 641865160, 642251177, 642398341, 643137322, 643198391, 643756370, 644459789, 644688076, 645338481, 646291388, 646715139, 646722238, 646831171, 647394415, 649263351, 649480890, 649991693, 650044736, 650295734, 651656466, 652614478, 652789731, 652827266, 653182035, 653227193, 653748325, 654240977, 654552831, 654574613, 654987784, 655198440, 655738353, 655952094, 656237361, 656773781, 656820833, 657573736, 658496224, 659561028, 659912102, 660013027, 660477375, 661226435, 661772436, 662078878, 662246395, 662323253, 662809063, 663615820, 664410792, 664803860, 665189913, 666164659, 666244714, 666345621, 666418892, 666619936, 666809198, 667836310, 667885897, 667930323, 668008900, 668270162, 668594779, 668856087, 668909363, 668955271, 669308163, 669349874, 669701483, 669786315, 671083065, 671682738, 671685090, 672146326, 672821786, 673277064, 673489039, 673695133, 674108462, 674349023, 674758314, 675104714, 675835777, 676011495, 676278605, 676719889, 676976145, 677223478, 677340891, 677482145, 678475324, 678677422, 678898282, 679040192, 679259361, 679849310, 679905226, 681782294, 682072234, 682203238, 683597328, 684189842, 684752088, 684770859, 684934477, 685065313, 687819532, 688232667, 688309065, 688444062, 689708608, 691616620, 692343117, 692677655, 693799817, 693909013, 694035792, 694570191, 694616782, 694845359, 694939926, 695154029, 695816709, 696315254, 696397855, 696548696, 697115127, 698147886, 698722919, 698759115, 699542983, 699710960, 700222995, 701705643, 702197267, 702261805, 703149982, 703970181, 704694227, 705149966, 705154745, 705541656, 705839204, 706589006, 706628914, 706697711, 706883055, 707757940, 707859883, 707882473, 708046883, 710525994, 710776970, 710809574, 711030854, 711059852, 711091052, 711524726, 711626091, 711827799, 712360850, 713025275, 713398354, 713402382, 714848284, 715015368, 715593095, 715799413, 716522446, 718062618, 718379595, 719130325, 719477716, 719506544, 720383729, 720920374, 721176607, 721659955, 721847332, 722318549, 722414384, 722862681, 722875755, 722976563, 724080561, 725138098, 725565421, 725646660, 726351200, 726520520, 727589688, 727687733, 727934981, 728662632, 728825184, 729052252, 729095673, 729269883, 729338436, 729435543, 729440522, 730313987, 730583828, 730895056, 731085011, 731886752, 732070540, 732143982, 732424548, 732454553, 733057158, 733190167, 733543437, 733547474, 733902642, 734230028, 734752905, 734779111, 734863340, 734865156, 735112662, 735430703, 735697089, 736203229, 736786556, 736795096, 736827053, 736841132, 737762875, 738795916, 739023854, 740279126, 740752779, 741118560, 741393059, 741780751, 741883899, 741893927, 742369312, 743002538, 743063213, 743083718, 743359765, 743480853, 743613457, 743649348, 743726693, 744443088, 744470942, 744909674, 745402427, 745475056, 745575782, 746033707, 746049783, 746356295, 747402421, 747503862, 747561383, 747774752, 747900160, 749563677, 750629634, 751109183, 751175118, 751457114, 751497520, 752302596, 752368382, 752390959, 752633073, 753000607, 753330622, 753334625, 753757355, 754647797, 755050427, 755104671, 755160905, 756251730, 756545003, 758471428, 758901395, 759815969, 760389392, 761713224, 762147009, 763044934, 763724241, 763848737, 764113277, 764184511, 764568199, 764649543, 765672931, 765694282, 765763889, 766639408, 767572322, 767818932, 768422931, 768498339, 768548204, 768891965, 769360145, 769478283, 771387162, 771766925, 771829606, 772097215, 773105866, 773316882, 773648454, 773752931, 774328499, 775026144, 775954620, 776059955, 776098738, 776330350, 777423358, 777646037, 777991943, 779361610, 779511527, 779669594, 779728391, 780286716, 780649343, 780683652, 780938090, 780957784, 781219245, 781356713, 781910551, 782050070, 782581865, 782852245, 783474295, 783696763, 783986060, 784233447, 784269799, 784392124, 785360517, 785397976, 786374276, 786545945, 786548567, 787089053, 787283898, 788177235, 788532694, 788659576, 788713750, 789331513, 789663336, 789798418, 789879288, 790604548, 791215357, 791319639, 792324877, 792807361, 792948958, 793250741, 793339162, 793968204, 794614730, 794619410, 794893406, 796206306, 797591939, 798135659, 798145074, 798192331, 798473235, 798994709, 799687463, 799823969, 799834815, 802106355, 802348941, 802990201, 803579805, 803728435, 803958446, 804729850, 804752756, 806217474, 806971294, 807000887, 808307188, 808480507, 810079545, 810439547, 810494725, 810544678, 811010796, 811031725, 811474143, 811790955, 812173634, 813185467, 813263314, 813568204, 813769567, 814659896, 814739558, 814977664, 815814682, 816284590, 816365132, 816401288, 816705919, 817432041, 817926071, 818056255, 818784121, 818978534, 820733692, 821017733, 821334164, 821403350, 821633068, 822200696, 822877657, 823497079, 824248433, 824660710, 825377081, 825684506, 826180425, 826345817, 827530739, 827708085, 828000198, 828551746, 830850196, 831809122, 831941050, 832313426, 833479681, 833615117, 833755802, 834079166, 834244852, 836306883, 836419059, 837578122, 837683290, 838088488, 838308244, 838337091, 838388127, 840284848, 840650850, 840845022, 842251195, 842607117, 842811907, 844528183, 844971340, 845526705, 846975332, 846990557, 847180799, 847288747, 848283970, 848952621, 849313620, 849371544, 849425965, 849645087, 850429719, 850712614, 851001821, 851244443, 851257629, 851571791, 851598629, 851711015, 852295442, 852693476, 852879129, 853029287, 853662451, 854631387, 854700149, 854752418, 855077176, 855608402, 856072111, 856929708, 857046665, 857286005, 857361419, 857686036, 858002521, 858071700, 858218191, 859208774, 859543753, 859890680, 860335925, 862330851, 862762705, 862977462, 863530900, 863639377, 863690672, 863692859, 863869558, 864167434, 864315934, 864448216, 864545445, 864698242, 864715552, 864951013, 864962218, 865580156, 865640179, 865783903, 866336805, 866857565, 866917630, 866946059, 867078466, 867123666, 867212091, 867416062, 867960052, 868038736, 868322951, 868378986, 868780485, 868966119, 869008127, 869217421, 869254994, 869511803, 870458972, 870585206, 870646743, 870720505, 871624296, 872004317, 872045506, 872485609, 873117207, 873414925, 873444821, 874267861, 874369269, 874566313, 877177576, 877244456, 877804303, 877857865, 877890551, 878243549, 878355339, 878680703, 878818392, 879765259, 880332557, 880816609, 881169691, 881370088, 882135496, 882341598, 884537772, 884969529, 884999085, 885331503, 885351583, 885476243, 885747750, 887751011, 888033687, 888206600, 888400648, 888711117, 888953661, 889505857, 889640342, 890213816, 890398543, 890686119, 890933490, 891623241, 893022719, 893383069, 894393425, 894541660, 894894349, 898551329, 898642811, 898971491, 899095279, 899279423, 900243323, 900406786, 900640584, 901352693, 901904360, 902378259, 903101417, 904488412, 905654034, 905854682, 907447135, 907837704, 908946578, 909038789, 910285635, 910287289, 910515839, 911435108, 912067969, 912277417, 912279449, 912577744, 912698438, 913237561, 914096743, 914586848, 914703413, 914868948, 914969835, 915382999, 915457371, 915863102, 916184683, 916392695, 916912235, 917207666, 917364304, 917490082, 918164299, 918451953, 918947000, 919560624, 919822621, 920426353, 920579155, 920969458, 921024365, 921496466, 922015510, 922065741, 922602416, 922725553, 922725827, 923102272, 923132062, 923409002, 923425920, 923775503, 923849308, 924469870, 924792572, 925316572, 926163573, 926225178, 926361661, 926430804, 926593574, 926603706, 927052599, 927662119, 928336986, 928339867, 928678445, 928870533, 928914459, 928955698, 929043059, 929495903, 929837705, 930456733, 930459192, 931117459, 931467345, 931494566, 931928931, 932979160, 933785654, 934617732, 934651648, 934682834, 934770422, 935250105, 935567778, 936581228, 937074554, 937822333, 938098312, 938615645, 938713977, 939209003, 940281540, 940549984, 940730592, 940738327, 940821363, 941326514, 941986694, 942186793, 942443832, 942458711, 942902607, 942938493, 943118355, 943905164, 944482165, 944517482, 945332838, 946893089, 947716495, 948536354, 948570589, 948613635, 949633782, 949853543, 950366232, 951057125, 951148424, 951559467, 952416958, 952664534, 952782478, 952790301, 952805913, 952987021, 953203761, 953723458, 954077710, 955271238, 955343414, 955627141, 957387815, 957623885, 958622885, 958735080, 959272585, 959923086, 960573875, 960638444, 960713432, 961044744, 961104085, 961198945, 961394903, 961409568, 961449620, 961484932, 961514045, 962252697, 962823504, 963281294, 963749425, 964136001, 965601776, 966151873, 966511222, 966680985, 967071626, 967815706, 967845218, 968023066, 968053484, 968334736, 968394289, 969556515, 969667422, 969822866, 970602787, 970643968, 970902334, 971179810, 971344640, 971372955, 971762783, 972018034, 972022378, 972231647, 972611734, 974220969, 974437265, 975187827, 975738243, 975752117, 976067555, 976121755, 976867310, 977086374, 977160888, 977366918, 977674699, 977740450, 978039700, 978093094, 978284217, 978514430, 979163240, 979172408, 979510441, 980251395, 980734883, 982075650, 982144682, 982261635, 982561365, 983072845, 983161615, 983426733, 983652653, 984222212, 985054904, 985783726, 987154655, 987407667, 987865399, 988063387, 988141489, 989531466, 989893217, 990673678, 990674544, 991121156, 991311160, 991317731, 991347170, 992010705, 992240944, 992749882, 993672147, 994062842, 994637679, 994744539, 994836777, 995517837, 995679665, 995803749, 996135284, 996137065, 996327867, 997185921, 997653169, 998004156, 998768793, 999198170, 999207158, 999317862, 1001197370, 1001491949, 1001687246, 1002048578, 1002621374, 1002845234, 1002846580, 1002905864, 1004418311, 1004642016, 1006244323, 1006450105, 1006623459, 1007915792, 1008295362, 1008576759, 1009056613, 1009621403, 1009948075, 1010004685, 1011281124, 1011760329, 1011948579, 1012363090, 1013030678, 1014787362, 1015397408, 1016261965, 1016391035, 1016453069, 1016864653, 1017355508, 1017385239, 1017916014, 1018066550, 1019428515, 1020049086, 1021760223, 1021980858, 1022401914, 1023315505, 1023368723, 1023945887, 1023965591, 1024141686, 1025033230, 1025122779, 1026733316, 1027295472, 1028516688, 1028831874, 1029953079, 1030039396, 1030857916, 1031499725, 1032015605, 1033229243, 1034236430, 1035175328, 1037228516, 1037428364, 1038628220, 1039561519, 1039706771, 1040930333, 1040949783, 1041145545, 1041822190, 1042721510, 1044206409, 1045185412, 1045561838, 1045726658, 1045869834, 1045891433, 1045916599, 1045948455, 1046013586, 1046551245, 1047220743, 1047521609, 1048335176, 1048505850, 1048914313, 1048940796, 1049135214, 1049205560, 1050061218, 1050171073, 1050756852, 1050788580, 1051134377, 1051195254, 1051202031, 1052565663, 1053666418, 1054159830, 1054294357, 1054347652, 1054503321, 1054783657, 1055402572, 1055404167, 1056037657, 1056587483, 1056995711, 1057823206, 1059578660, 1059944807, 1060454751, 1060874701, 1061033477, 1061162742, 1061298086, 1062037443, 1062541347, 1062722017, 1063012065, 1063738399, 1064231978, 1064724465, 1065275059, 1066365889, 1066703881, 1067039898, 1067088120, 1067490633, 1068991903, 1069070459, 1069605722, 1069697955, 1070268442, 1070275259, 1071611896, 1072629730, 1073167955, 1073403762, 1073735521, 1073875986, 1074288690, 1074723053, 1075187207, 1075325835, 1076391400, 1076547099, 1076697241, 1077051707, 1077491516, 1078482850, 1078826808, 1079181151, 1079645296, 1081669991, 1081707066, 1081828880, 1082173377, 1082284636, 1082887438, 1083109142, 1083161651, 1083394772, 1084450530, 1085667135, 1085908034, 1085979312, 1086350006, 1086592365, 1087813150, 1088014242, 1088297045, 1089270082, 1090114445, 1091028247, 1091045712, 1091443762, 1091739568, 1092061993, 1092150463, 1092675084, 1093258435, 1093319882, 1093484604, 1093518745, 1093632935, 1095901109, 1096176717, 1096213604, 1096759122, 1096841224, 1097354647, 1097442995, 1097513368, 1097788497, 1099428108, 1099489589, 1099598065, 1099907789, 1100299684, 1100944811, 1101195343, 1102275551, 1102467201, 1102898945, 1103142078, 1103191383, 1104040794, 1104548344, 1104564761, 1106009085, 1106541573, 1106746250, 1106760520, 1107001189, 1108270215, 1108663430, 1108697012, 1110358379, 1110359032, 1110606468, 1110886767, 1110933078, 1111102951, 1111275087, 1112827462, 1113070078, 1113271338, 1113392234, 1113482868, 1115519384, 1116696541, 1116715786, 1116767650, 1117766435, 1117920287, 1118083225, 1118185307, 1118194664, 1118255550, 1119384436, 1119470231, 1119714757, 1119855552, 1120518202, 1121394671, 1121794651, 1121881761, 1122380805, 1122604948, 1122655208, 1122758254, 1122835699, 1122945891, 1123145486, 1123652696, 1123867336, 1124051492, 1124605865, 1124662896, 1124987760, 1125145279, 1125556181, 1126112139, 1126697402, 1127317062, 1127423228, 1128921267, 1129043941, 1129134107, 1129667782, 1129672014, 1129730619, 1129742702, 1130343385, 1131305887, 1131520382, 1131680793, 1131730336, 1131997737, 1132205592, 1132324383, 1132764109, 1132808961, 1133548372, 1134062518, 1134900918, 1135431785, 1135451709, 1136281584, 1136503766, 1136804940, 1137242575, 1137310835, 1137370511, 1137683899, 1137867363, 1137955671, 1137960772, 1138705399, 1138912368, 1139420744, 1139449214, 1139950863, 1140258410, 1140617868, 1140655051, 1141128278, 1141665315, 1142725723, 1142851325, 1143663736, 1144367973, 1144748115, 1144923070, 1145148063, 1145157728, 1145339040, 1145474728, 1145576008, 1146395622, 1147907891, 1148109590, 1148225541, 1148345192, 1149042522, 1149140527, 1149338593, 1149750152, 1150345673, 1150719279, 1151372006, 1151621832, 1152508401, 1153988240, 1154029895, 1154108185, 1154173813, 1155533623, 1155557227, 1155923822, 1156517397, 1157695698, 1158019576, 1159314121, 1160063700, 1160397242, 1160561415, 1160571378, 1160819243, 1163357083, 1164310408, 1164504956, 1164875252, 1165060087, 1165883081, 1167785783, 1168330709, 1169228972, 1169325786, 1169423441, 1169567094, 1169665827, 1169862924, 1170131893, 1170324331, 1170830986, 1171847405, 1172571000, 1172653830, 1172719378, 1173628869, 1176272778, 1178423265, 1178466882, 1178872800, 1179002421, 1179404780, 1179468049, 1179837549, 1180603719, 1181127314, 1181407019, 1182923388, 1182955903, 1182981536, 1183900133, 1184100513, 1184412529, 1184744074, 1184861939, 1184930515, 1185227874, 1185284837, 1185352457, 1185877416, 1186197588, 1186518601, 1186923807, 1188066791, 1188782516, 1189041374, 1189719437, 1189754466, 1189861331, 1189995732, 1190270213, 1190647101, 1193925938, 1194257512, 1194821400, 1195552231, 1195857681, 1198392795, 1198669229, 1198967577, 1199014846, 1199386337, 1199515364, 1199715332, 1200202399, 1200480306, 1201116503, 1202245587, 1202530133, 1202963372, 1203235677, 1203440407, 1203643717, 1204306409, 1204666361, 1205032401, 1207154231, 1208031968, 1208281276, 1208759039, 1209006838, 1209149096, 1209314247, 1210102491, 1210478226, 1210567714, 1211168560, 1211551679, 1211630833, 1211938605, 1212513239, 1212581035, 1212829259, 1212966050, 1213300447, 1213415347, 1213856181, 1213976054, 1214452675, 1214595480, 1214963583, 1214994017, 1215653949, 1217042052, 1217440961, 1217494217, 1217895440, 1218004648, 1218751100, 1218968388, 1219555571, 1220055667, 1220377989, 1221458260, 1221667576, 1221933003, 1222610768, 1223254132, 1223847414, 1223849089, 1224266092, 1224656061, 1224951820, 1227816217, 1228526457, 1228936115, 1229414928, 1229731317, 1229755802, 1230100732, 1230325335, 1230458438, 1230568729, 1231924310, 1232071554, 1232408271, 1232571577, 1232884024, 1233234689, 1233724519, 1234845111, 1234999762, 1235145760, 1235445665, 1235631605, 1236300423, 1236671814, 1236681793, 1237446185, 1237681490, 1237846133, 1238228327, 1238367742, 1238543192, 1239378235, 1241399556, 1241593443, 1242720025, 1243474083, 1243762344, 1243911140, 1243989332, 1245571820, 1245777616, 1245782337, 1245956877, 1246225210, 1246656266, 1246831429, 1247195808, 1247665678, 1247702716, 1248132036, 1248446025, 1249384382, 1249530114, 1249569493, 1250099418, 1250266240, 1250407691, 1250916255, 1252443215, 1252794147, 1253200985, 1253379048, 1253770606, 1253915908, 1254109656, 1255310240, 1255685539, 1255806405, 1256136307, 1256782008, 1256826487, 1257038849, 1257350289, 1258083287, 1258372295, 1259170770, 1259715296, 1260313347, 1262259905, 1262606556, 1263513625, 1263922526, 1264141846, 1264447061, 1265300201, 1265320471, 1265748658, 1266082078, 1266662910, 1268560370, 1268906983, 1268919401, 1268954284, 1269272701, 1270621881, 1270907435, 1271372901, 1271884838, 1271927795, 1272281933, 1272283169, 1272668981, 1273559402, 1273927381, 1274023088, 1274187856, 1274855450, 1275738367, 1276748194, 1277111013, 1277129539, 1277373379, 1277839717, 1278169168, 1278624435, 1278858667, 1278936158, 1279155879, 1279181405, 1279389997, 1279635956, 1279692123, 1279940157, 1279968692, 1280397641, 1280701927, 1280907971, 1281005530, 1282580395, 1282692655, 1282738501, 1283059703, 1283396924, 1283490114, 1283850718, 1284122556, 1284245328, 1284399818, 1284822892, 1285753688, 1286268444, 1287006855, 1287459835, 1287945202, 1288037095, 1288251472, 1289225921, 1290782189, 1291271832, 1291826728, 1292443311, 1292546517, 1292577014, 1293525340, 1293933575, 1293967508, 1294188086, 1295091299, 1295372940, 1295643280, 1295706858, 1296083437, 1296087304, 1296824414, 1297183319, 1298848367, 1299147910, 1299244751, 1299255274, 1299279270, 1299530242, 1299669348, 1300491366, 1301220534, 1301733713, 1301784750, 1301946412, 1301952693, 1302240570, 1302485449, 1303430799, 1303582177, 1304958295, 1305774543, 1306323419, 1306392252, 1306571553, 1307026288, 1307055688, 1307070114, 1307637745, 1308065878, 1308226496, 1309467449, 1310850595, 1311144379, 1311205394, 1311314895, 1312382283, 1312455731, 1312684321, 1314225512, 1315522062, 1315606850, 1315702342, 1316501255, 1316535208, 1317180835, 1317749175, 1318446486, 1318858160, 1318870789, 1319250498, 1319945406, 1320181401, 1320508536, 1321465115, 1323222714, 1324247812, 1324638872, 1324728072, 1324815009, 1326616240, 1327387564, 1327565529, 1327583368, 1327765259, 1328021161, 1328487460, 1328821097, 1328869244, 1329310117, 1329933385, 1330828348, 1330895682, 1331028673, 1331305746, 1332081475, 1332166415, 1332446624, 1332845969, 1333719325, 1334120398, 1334561188, 1334598066, 1334656468, 1335169177, 1335492291, 1335596007, 1335630225, 1335932460, 1336296298, 1336381535, 1336772148, 1337092719, 1337406399, 1338202245, 1338575683, 1338729602, 1338865469, 1338892570, 1338953745, 1338960162, 1339471368, 1339704214, 1339832899, 1339848003, 1340197202, 1340708928, 1340898004, 1341087102, 1342417152, 1342470685, 1342663112, 1343066409, 1343937883, 1344504981, 1344841868, 1344891421, 1344924619, 1345689947, 1345914273, 1346359532, 1346523144, 1346698240, 1346813231, 1346874372, 1347325139, 1347491321, 1347589109, 1347694138, 1348077551, 1348148691, 1348279589, 1348387111, 1348764046, 1349527315, 1351397242, 1352465010, 1352648808, 1353319865, 1353922762, 1353975515, 1354451254, 1354914678, 1354928218, 1355229552, 1355624536, 1356147139, 1356755515, 1357005699, 1357073918, 1358151756, 1358161999, 1358981940, 1359592184, 1360048968, 1360267514, 1360597753, 1361881225, 1362184337, 1362310708, 1362803777, 1363147208, 1363427053, 1363440859, 1364090832, 1365638794, 1365702050, 1366208306, 1366500137, 1366997994, 1367025117, 1367236546, 1368186182, 1370030397, 1370166806, 1370484558, 1370716969, 1371243793, 1371294657, 1371730654, 1372335337, 1372968194, 1373545876, 1373776462, 1373831088, 1373969150, 1374041190, 1374480568, 1374777632, 1375098739, 1375732655, 1376083153, 1376253178, 1376285951, 1376470969, 1376850666, 1377401164, 1378421253, 1378714915, 1378756184, 1378951505, 1378980896, 1380015199, 1381021645, 1381086343, 1381282896, 1382173947, 1383026853, 1383083781, 1384697871, 1385093828, 1386436299, 1387565896, 1387627543, 1388125172, 1388623718, 1389283704, 1389419805, 1390641121, 1390808404, 1390811950, 1391404526, 1391409167, 1392265574, 1393619174, 1393752764, 1393820456, 1394527715, 1394956351, 1395311279, 1395362577, 1395414209, 1395450860, 1395908278, 1396442232, 1397172002, 1398707087, 1399197007, 1399413861, 1400192956, 1400863258, 1401225321, 1401295353, 1401548327, 1402063597, 1403390508, 1403438973, 1403586685, 1404077580, 1404137696, 1404293905, 1404466618, 1406633358, 1406826204, 1407123386, 1407307453, 1407437641, 1409567763, 1409574190, 1411109128, 1411432817, 1411480270, 1411674229, 1412094457, 1412103209, 1412334037, 1412686807, 1413463044, 1413569542, 1414453006, 1414705458, 1414721204, 1414920301, 1415904877, 1416268710, 1416577686, 1416761140, 1416803312, 1417354504, 1417457960, 1417546860, 1417910001, 1418050948, 1418954219, 1419053371, 1419090173, 1419671481, 1420280286, 1420328328, 1420690456, 1420717408, 1421177615, 1421347125, 1422234686, 1423766259, 1424001941, 1424827566, 1424866716, 1425140286, 1426037205, 1426551049, 1426666732, 1426713349, 1426803792, 1427254428, 1428675380, 1428833921, 1429659870, 1430273134, 1431242535, 1431475732, 1431587870, 1431646678, 1431655843, 1431801888, 1432161692, 1432436529, 1432709818, 1432827738, 1432972313, 1433770724, 1433899054, 1433917230, 1434400458, 1434402193, 1435354337, 1435627777, 1436396508, 1436633507, 1437012289, 1437994907, 1438009549, 1438207236, 1438391627, 1438422433, 1438625274, 1439002066, 1439469377, 1439832408, 1440151233, 1440271998, 1440790346, 1441260996, 1441316933, 1441607413, 1441907865, 1442013030, 1442756678, 1442761455, 1443473550, 1443542232, 1444826549, 1444943288, 1445555145, 1445722753, 1446323479, 1446927439, 1447514629, 1447671811, 1448624979, 1449026283, 1450487502, 1450872719, 1451140839, 1451706958, 1452028732, 1452539554, 1453468050, 1454176958, 1455212668, 1456176338, 1456947152, 1457471291, 1457507435, 1457911827, 1457942523, 1458182316, 1458648656, 1458888084, 1459037844, 1459173454, 1459703711, 1459954824, 1460577517, 1460981826, 1461477170, 1461571169, 1462121709, 1462193552, 1464307937, 1464437586, 1464745688, 1465424397, 1466281838, 1466392592, 1466686233, 1467966281, 1468296341, 1468418088, 1469499307, 1469518367, 1469536596, 1469652192, 1470228229, 1470365361, 1470531463, 1470551327, 1471373339, 1471643121, 1472625566, 1473672399, 1474605592, 1477365289, 1477410724, 1477780068, 1477806805, 1479075676, 1479590406, 1480439588, 1480820367, 1481006915, 1481113850, 1481296178, 1481361340, 1481432534, 1481972453, 1482764095, 1482895767, 1483225815, 1484571207, 1484681793, 1484818616, 1484829131, 1486138656, 1486554829, 1486558199, 1486720838, 1487568852, 1487826810, 1487921123, 1487925536, 1488929742, 1489803915, 1490284547, 1491211358, 1491527003, 1491533065, 1492270375, 1492308951, 1492520740, 1492537797, 1492586210, 1492865711, 1493215390, 1493835767, 1494966186, 1495215416, 1495366089, 1495479626, 1495622446, 1495705785, 1496524014, 1497447887, 1497890264, 1498503611, 1498675881, 1498712303, 1498942072, 1499238744, 1499257702, 1499294763, 1500779608, 1501036914, 1501128794, 1501148962, 1501478236, 1501930198, 1502020523, 1503839322, 1504402090, 1504654428, 1505054699, 1505071101, 1505155488, 1505411338, 1505424323, 1505592209, 1505815243, 1506368486, 1506849234, 1507042335, 1507966310, 1508024975, 1508507869, 1508751519, 1509156369, 1509688243, 1509827031, 1509928210, 1510868037, 1511306974, 1511630932, 1512040753, 1512824342, 1513291578, 1513316160, 1514318269, 1514463327, 1514603164, 1514630599, 1515092347, 1515137219, 1515164046, 1515295900, 1515577547, 1515724394, 1516049996, 1516521657, 1517405613, 1517856418, 1518136904, 1518423289, 1518586929, 1519187289, 1519610562, 1520258971, 1521019562, 1521510155, 1522429147, 1525584276, 1525643361, 1525957635, 1526189174, 1526393747, 1527039465, 1527800696, 1527885281, 1528323410, 1528434078, 1528697097, 1529144886, 1529756993, 1529933196, 1530067311, 1530150138, 1531225030, 1533415767, 1533436548, 1534377370, 1534845811, 1535056904, 1535314858, 1535917507, 1536045435, 1536067729, 1536703835, 1537088998, 1537145206, 1537200208, 1537468132, 1537471695, 1537999424, 1538134767, 1540295232, 1540491458, 1541300410, 1541424499, 1541697331, 1542184577, 1542410335, 1542556876, 1542758198, 1542970248, 1543349805, 1544089987, 1544135104, 1544529470, 1544574325, 1545256155, 1545349589, 1545384266, 1545631400, 1546932143, 1547687040, 1548312364, 1548628031, 1548909898, 1549819801, 1550001978, 1550011395, 1550328623, 1550516665, 1550940577, 1551228456, 1552749693, 1552828846, 1553283807, 1553745406, 1553859050, 1554091311, 1555193839, 1555338320, 1555358936, 1556715539, 1557173042, 1557446516, 1558974243, 1559775664, 1560038815, 1560147722, 1560786904, 1562300481, 1562522659, 1562912773, 1563335374, 1564159285, 1565764335, 1566376646, 1566628698, 1566947835, 1567613701, 1568288392, 1568944905, 1570505956, 1570957527, 1571293459, 1571475454, 1571607455, 1571723031, 1571833074, 1572127472, 1572287825, 1572484955, 1572734493, 1572884515, 1572962885, 1573020543, 1573126729, 1573199328, 1573292686, 1574297946, 1574876475, 1574905713, 1574918999, 1575322948, 1577308132, 1577681541, 1577770302, 1577871886, 1578157928, 1578315376, 1578322553, 1578552743, 1578982363, 1579273852, 1579734424, 1580110187, 1583016614, 1583384464, 1584166369, 1584645650, 1584692973, 1585764816, 1586500972, 1586963337, 1587819513, 1587859682, 1587887960, 1588119436, 1588384527, 1588399725, 1588536204, 1588684969, 1589427648, 1589809738, 1589823345, 1590065651, 1591835390, 1592040922, 1592503871, 1592734026, 1592792608, 1592847037, 1593099242, 1594262699, 1594305546, 1594780605, 1595185290, 1595446283, 1596253923, 1596278338, 1596390886, 1596493801, 1596860569, 1596924636, 1597262766, 1597434312, 1597465398, 1597524573, 1598567263, 1599010026, 1599076509, 1599987589, 1600453914, 1600495245, 1600618648, 1600662961, 1600677318, 1601551232, 1601716049, 1602132971, 1602212414, 1602301218, 1602727361, 1602926328, 1603156261, 1603864009, 1604776734, 1605777203, 1606078995, 1606131844, 1606899217, 1608227821, 1608566822, 1608791143, 1608952645, 1610627789, 1610740826, 1611068161, 1611100938, 1611259399, 1612974724, 1613204722, 1613955335, 1614141563, 1614210031, 1614340481, 1614351130, 1614355847, 1615436836, 1617020890, 1617109076, 1617273994, 1617970633, 1618423805, 1618624139, 1621527637, 1622559032, 1622756595, 1622838125, 1622995699, 1624157893, 1624529499, 1625177152, 1625993235, 1626269512, 1626320932, 1627077534, 1627163947, 1627366533, 1628642257, 1628685154, 1629353521, 1629522748, 1629967984, 1630034047, 1630236308, 1630403822, 1631276024, 1631986129, 1632327513, 1632906674, 1633124381, 1633684659, 1634961320, 1635150169, 1635254171, 1636063299, 1636111654, 1636324675, 1637307343, 1637609375, 1637796373, 1638932580, 1639887494, 1640107559, 1640146866, 1640357900, 1640714416, 1641536075, 1642290201, 1642860219, 1642926966, 1643350175, 1644533128, 1646536855, 1647229994, 1647709822, 1648297702, 1648349842, 1648720517, 1649604265, 1649720662, 1649734513, 1650454866, 1650677448, 1650747125, 1651116988, 1651250055, 1651941193, 1652374962, 1652379852, 1652434029, 1653730499, 1654148816, 1654329057, 1654810398, 1655133416, 1655296185, 1655869699, 1657001984, 1657806079, 1658190683, 1658468426, 1658649251, 1658700106, 1658817376, 1659481528, 1660300438, 1660312972, 1660360737, 1660462208, 1660496346, 1661225433, 1661343702, 1662238610, 1663088732, 1663179546, 1663329702, 1663550827, 1663826379, 1664143180, 1664536340, 1665622221, 1665877753, 1666968611, 1667451933, 1667581971, 1667829566, 1668616448, 1669060033, 1672059398, 1672534886, 1672910214, 1673046748, 1673375383, 1674714687, 1674992501, 1675124744, 1675641902, 1675869287, 1676054388, 1676076507, 1676450186, 1676799435, 1677203242, 1677322528, 1677676872, 1677883327, 1678928855, 1679030208, 1680338289, 1680852125, 1681100830, 1681318355, 1681331012, 1681702801, 1681778102, 1682669387, 1682867993, 1683616387, 1683641316, 1683802895, 1685420638, 1686677147, 1687312815, 1687605137, 1687665199, 1687696331, 1688240756, 1688581369, 1688735955, 1690956454, 1691241642, 1691461324, 1691617220, 1692548375, 1692578281, 1692834312, 1693013989, 1694072282, 1694940720, 1695662683, 1696369243, 1696551270, 1696867317, 1697075324, 1698084470, 1698183948, 1698196922, 1700003723, 1700141249, 1700672516, 1701331539, 1701402530, 1701430658, 1701665097, 1701672507, 1702856233, 1702988520, 1703060592, 1703065034, 1703119373, 1703203933, 1703337249, 1703520274, 1703589775, 1703653820, 1704029906, 1704369116, 1704369934, 1704784586, 1705950588, 1706122326, 1706477638, 1707215951, 1708441928, 1708682997, 1709012309, 1709304704, 1709694569, 1709998552, 1710139192, 1711220056, 1711229989, 1711862313, 1712519317, 1713282684, 1713501083, 1713829856, 1714011147, 1714364949, 1714379436, 1715065140, 1715850330, 1716058596, 1716177155, 1716346184, 1717110985, 1717119503, 1717127200, 1717284775, 1717722315, 1718149562, 1718836099, 1719262375, 1719640787, 1719701015, 1719896575, 1721035069, 1722185503, 1723087419, 1723180154, 1723192318, 1723265203, 1723589132, 1724333320, 1724490176, 1724770339, 1725534760, 1725830865, 1726125484, 1727213810, 1727561905, 1728357083, 1728391427, 1728521850, 1728682470, 1728725492, 1729287765, 1729951909, 1729984784, 1730197340, 1730542626, 1731054311, 1731671822, 1732317065, 1732980858, 1734036224, 1734074878, 1734441316, 1734854224, 1734898364, 1735195756, 1735594758, 1736126107, 1736323725, 1736845784, 1737507642, 1738051048, 1738139628, 1738146638, 1738489842, 1738496809, 1738530654, 1738855759, 1739006604, 1739591821, 1739986277, 1740066981, 1741548908, 1741634309, 1741641875, 1741737655, 1742116590, 1742238535, 1742376052, 1742438706, 1742778993, 1743016023, 1743227785, 1743347606, 1743349470, 1743687230, 1743957622, 1743982191, 1745964721, 1746048171, 1746060174, 1746686068, 1747952590, 1748497083, 1748760551, 1749288170, 1749444656, 1750693877, 1751053753, 1751185359, 1751246635, 1751413413, 1751979222, 1752456092, 1753177139, 1753303200, 1753427853, 1753709907, 1754345026, 1754352486, 1754429067, 1754518900, 1754943617, 1755546162, 1755694368, 1755962354, 1757702815, 1757717476, 1758260527, 1758387297, 1758535784, 1758947821, 1758989630, 1759308461, 1759615820, 1759636918, 1759742076, 1759918284, 1760263675, 1760791586, 1761277093, 1762431758, 1762805029, 1762927696, 1763011630, 1763083756, 1763226577, 1763537161, 1764682909, 1765198097, 1765519641, 1765955798, 1767808233, 1768093547, 1768687548, 1768939487, 1769170504, 1769184922, 1770181377, 1770689299, 1771522911, 1771830213, 1772684169, 1772820987, 1773240302, 1773510470, 1773943213, 1773999623, 1774520361, 1774603999, 1774927757, 1776053075, 1777035714, 1777380386, 1777597638, 1778217765, 1778582563, 1778699945, 1780450921, 1780565949, 1780622447, 1780750500, 1780856826, 1781397305, 1781401279, 1781553441, 1781573824, 1782493189, 1782624169, 1782815681, 1782908209, 1783272330, 1783326512, 1784700102, 1784713430, 1785260130, 1785834252, 1785924210, 1786103392, 1786280682, 1786473033, 1786514125, 1786861730, 1786952459, 1786993229, 1787537537, 1787668515, 1788513152, 1789345085, 1789400716, 1789535641, 1790103494, 1790143538, 1792083649, 1792254751, 1792620591, 1794340346, 1794357686, 1794490517, 1794943410, 1795502307, 1795721128, 1796813671, 1796963021, 1797113510, 1797162232, 1797444414, 1797619044, 1797728934, 1798140871, 1798402747, 1800582443, 1801303838, 1801586407, 1801658755, 1801837288, 1802577122, 1802635373, 1803050579, 1803592462, 1804655217, 1804928365, 1805290600, 1805505259, 1805832156, 1805868842, 1805894224, 1806827275, 1807521201, 1808367274, 1808392656, 1808509937, 1809461708, 1810048049, 1810435854, 1811085813, 1811664889, 1811709457, 1812253748, 1812309555, 1812393069, 1812912249, 1813173292, 1813441175, 1813732126, 1814647359, 1814935557, 1815653619, 1816102267, 1816320381, 1816506154, 1817096787, 1817148031, 1817312874, 1817317219, 1817548991, 1817670925, 1817797908, 1819034776, 1819036677, 1819875129, 1819967235, 1820341070, 1820378179, 1820878703, 1821036925, 1821087797, 1821301273, 1821306646, 1822071689, 1822602402, 1824289530, 1824762433, 1825710963, 1825728359, 1827378371, 1827863314, 1827920648, 1828425222, 1828537765, 1830143065, 1830629766, 1832248622, 1832489779, 1833340282, 1834393134, 1834480784, 1834575621, 1835001940, 1835920611, 1836527109, 1837169419, 1837258998, 1838938698, 1839263896, 1839527737, 1840132773, 1840208984, 1840724988, 1841214419, 1841518613, 1841952895, 1841971719, 1843003323, 1843566603, 1843567440, 1843604749, 1844191069, 1845558180, 1845634779, 1846380311, 1846559630, 1846622071, 1847412994, 1847487018, 1847896020, 1848522513, 1848583277, 1848679183, 1848862316, 1849118239, 1849171695, 1849200475, 1849248473, 1849282419, 1850594080, 1850757369, 1851112617, 1851371693, 1851496819, 1851761979, 1852630138, 1852699948, 1853919258, 1854273821, 1854777642, 1854891870, 1855629208, 1857009347, 1858083503, 1858535119, 1858749486, 1858883861, 1859278386, 1859549841, 1860112178, 1860652672, 1861503909, 1861757926, 1862346168, 1862582254, 1863011205, 1863084969, 1863267138, 1863820437, 1866385208, 1866391571, 1866537677, 1868612272, 1868839068, 1868990025, 1869014126, 1869523381, 1869756086, 1870149384, 1870196178, 1870374433, 1871349501, 1871500041, 1871602014, 1872106799, 1872314139, 1873052992, 1873201317, 1873326072, 1873365096, 1873492952, 1873845102, 1873890281, 1873965537, 1874167625, 1874543566, 1874570972, 1874982308, 1875262997, 1875983577, 1876751162, 1877684549, 1878413863, 1878943310, 1879177194, 1880373419, 1882686858, 1883037483, 1883816329, 1883859495, 1883860867, 1885884278, 1886084394, 1886167189, 1886681699, 1887678036, 1888056569, 1888139660, 1888294297, 1889018549, 1889060324, 1889758513, 1890102760, 1890342355, 1890645104, 1890669089, 1890803396, 1891633953, 1891820895, 1891980867, 1893303465, 1893431603, 1893495397, 1894036477, 1894387136, 1894717491, 1895857265, 1896528572, 1896766660, 1898283814, 1898877511, 1898970072, 1899249636, 1899900575, 1899922342, 1899982830, 1900123917, 1900738456, 1901107693, 1901431649, 1903667890, 1904221916, 1904232740, 1904451884, 1904677004, 1904771309, 1905544024, 1906000804, 1906506297, 1906606136, 1906887093, 1907099772, 1907485545, 1907705817, 1907716857, 1908000062, 1908215055, 1908516875, 1908723103, 1909030137, 1909648832, 1910816017, 1911102461, 1911184539, 1911276405, 1912503222, 1912860193, 1913609544, 1913946472, 1914000636, 1914445627, 1914615638, 1914910025, 1915104325, 1915880049, 1916549163, 1916841062, 1917369598, 1917443365, 1919068518, 1919200071, 1919433490, 1920692757, 1920879735, 1921936360, 1922183678, 1924762951, 1925474354, 1925682826, 1925694359, 1926419340, 1926714284, 1927123506, 1927155488, 1927242345, 1927666918, 1927879491, 1928150041, 1928544646, 1928593478, 1928685538, 1929040202, 1930266435, 1930588890, 1930787238, 1931989335, 1933018081, 1933390256, 1935253923, 1935746327, 1935962812, 1936379302, 1936380541, 1936500620, 1936538743, 1936986792, 1937556147, 1938408803, 1938812310, 1938895481, 1938971068, 1939139601, 1939145384, 1939689368, 1940014307, 1940271434, 1940325912, 1940877157, 1941358941, 1941773326, 1942210818, 1942234553, 1942549050, 1942566427, 1942925299, 1943044143, 1943512459, 1944694704, 1944742696, 1945540387, 1945580682, 1945907470, 1946131674, 1946155943, 1946593460, 1946956775, 1947036473, 1947368765, 1947751675, 1948593756, 1949327238, 1949415773, 1949845382, 1950162186, 1950279339, 1950341788, 1951138328, 1951799513, 1952782221, 1952930575, 1953803379, 1953911813, 1953932588, 1956474684, 1956503175, 1957107471, 1958758269, 1958761156, 1959460902, 1959623224, 1960310616, 1960967195, 1961587799, 1961896047, 1962628183, 1962718950, 1962945300, 1963253211, 1963331797, 1963738313, 1964711919, 1964993376, 1965881495, 1966317509, 1966789878, 1967015957, 1967075540, 1967260962, 1967843812, 1968192973, 1968615544, 1969378485, 1969628052, 1970098050, 1970796720, 1971666031, 1971852231, 1972106010, 1972539641, 1972705665, 1973153930, 1973239234, 1974030168, 1974083286, 1974362952, 1974799828, 1974962801, 1975399379, 1975576765, 1975802580, 1976720139, 1977522141, 1977919156, 1978392146, 1978411804, 1978828133, 1978864258, 1978882035, 1979204050, 1979644825, 1979819161, 1980334117, 1980488965, 1980644550, 1981147647, 1981366621, 1982130887, 1982616717, 1982654379, 1983108240, 1983925037, 1984700391, 1985061249, 1985112935, 1985142005, 1985861599, 1985926267, 1986069817, 1986311930, 1986998598, 1987133995, 1987427037, 1987598360, 1987882979, 1988230246, 1988297243, 1989903498, 1990182291, 1990336451, 1991093313, 1991273137, 1992355657, 1992622826, 1994484594, 1994646476, 1994853778, 1994862576, 1995375397, 1996550113, 1996993537, 1997121833, 1997752445, 1998049975, 1998073933, 1999201231, 1999864505, 2000262411, 2000634159, 2000844400, 2001050984, 2002155079, 2002261003, 2002489354, 2002537209, 2003224526, 2003336048, 2003420830, 2003456921, 2004048608, 2004804756, 2004975982, 2005376492, 2006381252, 2006528150, 2007048571, 2007331901, 2008340063, 2009066827, 2009265703, 2009482580, 2010292096, 2010383554, 2010540436, 2011018324, 2011844930, 2012956164, 2014005617, 2014654661, 2014712555, 2015205634, 2015417177, 2015532322, 2016794566, 2017622294, 2018263392, 2018438891, 2019013611, 2019288193, 2020042391, 2020568467, 2020799701, 2021139495, 2021272888, 2021767278, 2021948258, 2023011570, 2023802782, 2024153454, 2024255405, 2024280757, 2024560883, 2024562345, 2024656799, 2026539500, 2027848718, 2028349296, 2028419031, 2028499944, 2029216569, 2029456756, 2029609211, 2030229989, 2031040360, 2031064506, 2032129433, 2032221814, 2032653019, 2032908689, 2033609517, 2033661025, 2034064572, 2035333826, 2035636101, 2035647955, 2035665173, 2035672508, 2036059792, 2036450064, 2036549119, 2037087557, 2037370859, 2037786705, 2038202976, 2039231118, 2039550596, 2039706913, 2039919815, 2039960353, 2040201774, 2040412214, 2040547624, 2040649902, 2040971674, 2041614957, 2041909728, 2042323036, 2042994992, 2043113846, 2043143876, 2043341538, 2043376992, 2043377753, 2043881786, 2043910119, 2043951749, 2044019291, 2044424516, 2045234683, 2045277847, 2045376583, 2045437733, 2045663356, 2045758300, 2045889338, 2046611512, 2048510075, 2048680918, 2049645577, 2049816884, 2051328429, 2051847508, 2052492846, 2052685483, 2052798982, 2053683314, 2053907505, 2054864531, 2055660770, 2055673925, 2055692733, 2056474939, 2057539664, 2058105121, 2058555261, 2059701516, 2059818057, 2059993164, 2061007823, 2061149153, 2061519144, 2063532713, 2063713321, 2063857513, 2064877655, 2065008686, 2065031906, 2065045684, 2065460137, 2065505240, 2066207586, 2066494963, 2067134761, 2067578692, 2067701419, 2068356441, 2068528205, 2068574730, 2069894839, 2069976068, 2070120951, 2070994798, 2071163468, 2071574432, 2072759945, 2072778886, 2072815158, 2073191003, 2073402220, 2073930273, 2075636476, 2076003187, 2076192015, 2077076567, 2078648636, 2079095429, 2079179584, 2079435442, 2079545349, 2079822850, 2079897766, 2080321250, 2080394863, 2080762662, 2080891988, 2081520154, 2081772237, 2082630036, 2083408686, 2083427489, 2083587031, 2084047133, 2084192868, 2084289814, 2084894190, 2085064797, 2086302580, 2086525545, 2086691529, 2086909652, 2087076204, 2087334982, 2088429347, 2089132848, 2089705840, 2089944470, 2090540041, 2090852128, 2091307623, 2091321237, 2091331160, 2091373817, 2091434943, 2091458783, 2091796732, 2092136051, 2092285011, 2092524263, 2093395963, 2093457153, 2093474463, 2093832682, 2094079426, 2094448118, 2094731433, 2094909856, 2095234310, 2095663540, 2096192460, 2096270030, 2096735348, 2097307005, 2098709076, 2099277336, 2099355091, 2099565271, 2100001463, 2100003671, 2100575346, 2100628253, 2100803236, 2101405815, 2102032490, 2102222970, 2102518675, 2103340097, 2103434450, 2103622300, 2104041177, 2104587751, 2104832080, 2104908443, 2105093190, 2105121732, 2105135643, 2105237291, 2105352029, 2105974304, 2106575119, 2107027971, 2107627387, 2108074027, 2108074482, 2108259967, 2108411879, 2108760601, 2109136011, 2109218504, 2109219851, 2110314690, 2110394196, 2110743149, 2111249530, 2112235004, 2112562323, 2112731061, 2114414121, 2114473419, 2114725736, 2114902011, 2115106824, 2115370154, 2115818759, 2115881001, 2116337888, 2116864875, 2116993100, 2118309807, 2118661739, 2119507163, 2120524294, 2121036147, 2121302703, 2121924029, 2123309014, 2123544703, 2124015164, 2124730419, 2125211673, 2126650020, 2126975387, 2127168154, 2127353174, 2128265419, 2128982363, 2129061430, 2129348972, 2129417582, 2129788983, 2129928043, 2130757871, 2130785485, 2130981488, 2130987013, 2131920797, 2132625120, 2133253669, 2133475269, 2133611793, 2133624671, 2133637495, 2133959671, 2134497315, 2134856529, 2135908965, 2136209131, 2136216179, 2136731959, 2136802278, 2136943899, 2136977172, 2137261837, 2137727351, 2138072099, 2139506780, 2141187746, 2142140589, 2142452131, 2142797388, 2143466333, 2143761913, 2143983738, 2144088545, 2145737412, 2145766372, 2146270025, 2146290445
\ No newline at end of file
diff --git a/radix b/radix
new file mode 100755
index 0000000000000000000000000000000000000000..3df6114965f06bb640097e00399f36095d3ccfbd
GIT binary patch
literal 9100
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
BYS{n)

literal 0
HcmV?d00001

diff --git a/radix_serial.c b/radix_serial.c
new file mode 100644
index 0000000..f0504ba
--- /dev/null
+++ b/radix_serial.c
@@ -0,0 +1,107 @@
+// C++ implementation of Radix Sort 
+#include <time.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+  
+// A utility function to get maximum value in arr[] 
+int getMax(int arr[], int n) 
+{ 
+    int mx = arr[0]; 
+    for (int i = 1; i < n; i++) 
+        if (arr[i] > mx) 
+            mx = arr[i]; 
+    return mx; 
+} 
+  
+// A function to do counting sort of arr[] according to 
+// the digit represented by exp. 
+void countSort(int arr[], int n, int exp) 
+{ 
+    int output[n]; // output array 
+    int i, count[10] = {0}; 
+  
+    // Store count of occurrences in count[] 
+    for (i = 0; i < n; i++) 
+        count[ (arr[i]/exp)%10 ]++; 
+  
+    // Change count[i] so that count[i] now contains actual 
+    //  position of this digit in output[] 
+    for (i = 1; i < 10; i++) 
+        count[i] += count[i - 1]; 
+  
+    // Build the output array 
+    for (i = n - 1; i >= 0; i--) 
+    { 
+        output[count[ (arr[i]/exp)%10 ] - 1] = arr[i]; 
+        count[ (arr[i]/exp)%10 ]--; 
+    } 
+  
+    // Copy the output array to arr[], so that arr[] now 
+    // contains sorted numbers according to current digit 
+    for (i = 0; i < n; i++) 
+        arr[i] = output[i]; 
+} 
+  
+// The main function to that sorts arr[] of size n using  
+// Radix Sort 
+void radix_sort(int arr[], int n) 
+{ 
+    // Find the maximum number to know number of digits 
+    int m = getMax(arr, n); 
+  
+    // Do counting sort for every digit. Note that instead 
+    // of passing digit number, exp is passed. exp is 10^i 
+    // where i is current digit number 
+    for (int exp = 1; m/exp > 0; exp *= 10) 
+        countSort(arr, n, exp); 
+} 
+  
+// A utility function to print an array 
+// void print(int arr[], int n) 
+// { 
+//     for (int i = 0; i < n; i++) 
+//         cout << arr[i] << " "; 
+// } 
+
+void rng(int* arr, int n) {
+    int seed = 13515024; // Ganti dengan NIM anda sebagai seed.
+    srand(seed);
+    for(long i = 0; i < n; i++) {
+        arr[i] = (int)rand();
+    }
+}
+
+// Driver program to test above functions 
+int main(int argc, char *argv[]) 
+{ 
+    int n = strtol(argv[1], NULL, 10);
+    struct timeval start, end;
+    long double cpu_time_used = 0.0;
+    int arr[400000] = {0};
+
+    FILE *o_file;
+
+    o_file = fopen("output.txt","w");
+
+    rng(arr, n);
+    gettimeofday(&start, NULL);
+    radix_sort(arr, n);
+    gettimeofday(&end, NULL);
+    // for (int i = 0; i < n; i++) {
+    //     printf("%d ", arr[i]);
+    // }
+    for (int i = 0; i < n; i++) {
+        if (i == n-1)
+            fprintf(o_file,"%d", arr[i]);
+        else
+            fprintf(o_file,"%d, ",arr[i]);
+    }
+    fclose(o_file);
+
+    cpu_time_used = (end.tv_sec - start.tv_sec)*1e6;
+    cpu_time_used = (long double) (cpu_time_used + (end.tv_usec - start.tv_usec))*1e-6;
+    cpu_time_used *= 1000;
+    printf("Time of execution: %Le microseconds\n", cpu_time_used);
+    return 0; 
+} 
\ No newline at end of file
-- 
GitLab