- #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=