#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<queue>
#include<list>
using namespace std;
const int maxx=10;
int pa[maxx];
int n;
template<class T>
class Queue{
private:
list<T>q;
public:
int Size(){return q.size();}
int Empty(){return q.empty();}
void Clear(){return q.clear();}
void Push(const T&item){q.push_back(item);}
T Pop(){T item=q.front();q.pop_front();return item;}
};
void Radixsort(int n){
Queue<int>q[10];//10个箱子
int base=1,flag=1,k;
while(flag){
for(int i=0;i<n;i++){//分配
k=(pa[i]/base)%10;
q[k].Push(pa[i]);
}
base*=10;//晋级到更高一位
flag=0;//每趟收集前,令flag=0
int i=0;
for(k=0;k<10;k++){//收集
while(!q[k].Empty()){
pa[i++]=q[k].Pop();
if(pa[i-1]/base!=0&&flag==0){
flag=1;//还有更大的数位
}
}
}
}
}
int main(){
while(scanf("%d",&n)!=EOF){
for(int i=0;i<n;i++){
scanf("%d",&pa[i]);
}
Radixsort(n);
for(int i=0;i<n;i++){
cout<<pa[i]<<" ";
}
}
return 0;
}