#include <cstdlib>
#include <iostream>
#include <iomanip>
#include <fstream>
#include <string>
#include <time.h>
#include <sstream>
using namespace std;
int getMax(int arr[], int n)
{
int max = arr[0];
for (int i = 1; i < n; i++)
if (arr[i] > max)
max = arr[i];
return max;
}
void countSort(int arr[], int n, int exp)
{
int output[n];
int i, count[10] = {0};
for (i = 0; i < n; i++)
count[(arr[i] / exp) % 10]++;
for (i = 1; i < 10; i++)
count[i] += count[i - 1];
for (i = n - 1; i >= 0; i--)
{
output[count[(arr[i] / exp) % 10] - 1] = arr[i];
count[(arr[i] / exp) % 10]--;
}
for (i = 0; i < n; i++)
arr[i] = output[i];
}
void radixsort(int arr[], int n)
{
clock_t clockStart;
clockStart = clock();
int m = getMax(arr, n);
for (int exp = 1; m / exp > 0; exp *= 10)
countSort(arr, n, exp);
cout << "\nTime taken by radix sort: " << (double)(clock() - clockStart) / CLOCKS_PER_SEC << endl;
}
int StrToInt(string sti)
{
int f;
stringstream ss(sti); //turn the string into a stream
ss >> f;
return f;
}
int main()
{
int arr[10000];
int n = 0;
while(cin >> arr[n]) {
n++;
}
radixsort(arr, n);
for (int i = 0; i < n; i++) {
cout << arr[i] << "\n";
}
return 0;
}
I2luY2x1ZGUgPGNzdGRsaWI+CiNpbmNsdWRlIDxpb3N0cmVhbT4KI2luY2x1ZGUgPGlvbWFuaXA+CiNpbmNsdWRlIDxmc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8dGltZS5oPgojaW5jbHVkZSA8c3N0cmVhbT4KCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgppbnQgZ2V0TWF4KGludCBhcnJbXSwgaW50IG4pCnsKICAgIGludCBtYXggPSBhcnJbMF07CiAgICBmb3IgKGludCBpID0gMTsgaSA8IG47IGkrKykKICAgICAgICBpZiAoYXJyW2ldID4gbWF4KQogICAgICAgICAgICBtYXggPSBhcnJbaV07CiAgICByZXR1cm4gbWF4Owp9Cgp2b2lkIGNvdW50U29ydChpbnQgYXJyW10sIGludCBuLCBpbnQgZXhwKQp7CiAgICBpbnQgb3V0cHV0W25dOwogICAgaW50IGksIGNvdW50WzEwXSA9IHswfTsKICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspCiAgICAgICAgY291bnRbKGFycltpXSAvIGV4cCkgJSAxMF0rKzsKICAgIGZvciAoaSA9IDE7IGkgPCAxMDsgaSsrKQogICAgICAgIGNvdW50W2ldICs9IGNvdW50W2kgLSAxXTsKICAgIGZvciAoaSA9IG4gLSAxOyBpID49IDA7IGktLSkKICAgIHsKICAgICAgICBvdXRwdXRbY291bnRbKGFycltpXSAvIGV4cCkgJSAxMF0gLSAxXSA9IGFycltpXTsKICAgICAgICBjb3VudFsoYXJyW2ldIC8gZXhwKSAlIDEwXS0tOwogICAgfQogICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykKICAgICAgICBhcnJbaV0gPSBvdXRwdXRbaV07Cn0KCnZvaWQgcmFkaXhzb3J0KGludCBhcnJbXSwgaW50IG4pCnsKICAgIGNsb2NrX3QgY2xvY2tTdGFydDsKICAgIGNsb2NrU3RhcnQgPSBjbG9jaygpOwoKICAgIGludCBtID0gZ2V0TWF4KGFyciwgbik7CiAgICBmb3IgKGludCBleHAgPSAxOyBtIC8gZXhwID4gMDsgZXhwICo9IDEwKQogICAgICAgIGNvdW50U29ydChhcnIsIG4sIGV4cCk7CgogICAgY291dCA8PCAiXG5UaW1lIHRha2VuIGJ5IHJhZGl4IHNvcnQ6ICIgPDwgKGRvdWJsZSkoY2xvY2soKSAtIGNsb2NrU3RhcnQpIC8gQ0xPQ0tTX1BFUl9TRUMgPDwgZW5kbDsKfQoKaW50IFN0clRvSW50KHN0cmluZyBzdGkpIAp7CiAgICBpbnQgZjsKICAgIHN0cmluZ3N0cmVhbSBzcyhzdGkpOyAvL3R1cm4gdGhlIHN0cmluZyBpbnRvIGEgc3RyZWFtCiAgICBzcyA+PiBmOwogICAgcmV0dXJuIGY7Cn0KCmludCBtYWluKCkKewogICAgaW50IGFyclsxMDAwMF07CiAgICBpbnQgbiA9IDA7CiAgICB3aGlsZShjaW4gPj4gYXJyW25dKSB7CiAgICAJbisrOwogICAgfQogICAgcmFkaXhzb3J0KGFyciwgbik7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykgewogICAgICAgIGNvdXQgPDwgYXJyW2ldIDw8ICJcbiI7CiAgICB9CiAgICByZXR1cm4gMDsKfQo=