#include <iostream>
#include <cstring>
const int N=1000;
using namespace std;
const int scale=10;
int power(int digit)
{
if(digit==1) return 1;
int value=1;
for(int i=2;i<=digit;i++) value=value*scale;
return value;
}
int calculate(int a,int digit)
{
return (a/power(digit))%10;
}
int search(int A[],int length,int digit)
{
int max=calculate(A[1],digit);
for(int i=1;i<=length;i++)
{
max=(max>calculate(A[i],digit)?max:calculate(A[i],digit));
}
return max;
}
void COUNTING_SORT(int A[],int length,int k,int digit)
{
int TEMP[N];
memset(TEMP,0,sizeof(TEMP));
int B[N];
for(int i=1;i<=length;i++) TEMP[calculate(A[i],digit)]++;
for(int i=1;i<=k;i++) TEMP[i]=TEMP[i]+TEMP[i-1];
for(int i=length;i>0;i--)
{
B[TEMP[calculate(A[i],digit)]]=A[i];
TEMP[calculate(A[i],digit)]--;
}
for(int i=1;i<=length;i++)
{
A[i]=B[i];
}
}
void RADIX_SORT(int A[],int length,int digit)
{
for(int i=1;i<=digit;i++)
{
int max;
max=search(A,length,digit);
COUNTING_SORT(A,length,max,digit);
}
}
int main(int argc, char *argv[])
{
int A[N];
int n; cin>>n;
int digit; cin>>digit;
for(int i=1;i<=n;i++) cin >> A[i];
for(int i=1;i<=digit;i++) RADIX_SORT(A,n,i);
for(int i=1;i<=n;i++) cout << A[i] <<ends;
cout << endl;
cout << "Hello World!" << endl;
return 0;
}