#include #define MAXN 40 /* Maximální počet čísel */ int buckets[MAXN][MAXN]; /* Přihrádky na čísla */ int bused[MAXN]; /* Počet čísel v přihrádce */ int A[MAXN]; /* Posloupnost čísel */ int N; /* Počet čísel */ int main(void) { int i, j, D = 1, k; /* ; Aktuální číslice; N umocněné na j; */ int ActN; /* Počet sebraných čísel */ /* Nacteme vstup */ scanf("%d", &N); for (i = 0; i < N; i++) { scanf("%d", &A[i]); A[i]--; } for (j = 0; j < 3; j++) { /* Tři průchody... */ for (i = 0; i < N; i++) /* Inicializace přihrádek */ bused[i] = 0; for (i = 0; i < N; i++) /* Rozdělíme čísla do přihrádek */ buckets[A[i]/D%N][bused[A[i]/D%N]++] = A[i]; ActN = 0; for (i = 0; i < N; i++) /* Sebereme čísla z přihrádek */ for (k = 0; k < bused[i]; k++) A[ActN++] = buckets[i][k]; D *= N; } for (i = 0; i < N; i++) printf("%d\n", A[i]+1); return 0; }