/*
	Bucket Sort
	@author: md.moniruzzaman
*/

#include<stdio.h>
#include<vector>

#define maxn 100

using namespace std;

struct list {
	vector<int>V;
};

list bucket[maxn];

vector<int>final;

void Bucket_Sort(int n) {
	int buck, ind, temp;
	buck = n / 100;
	bucket[buck].V.push_back(n);
	ind = bucket[buck].V.size() - 1;

	while(ind > 0) { 
		if(bucket[buck].V[ind] < bucket[buck].V[ind-1]) {
			temp = bucket[buck].V[ind];
			bucket[buck].V[ind] = bucket[buck].V[ind-1];
			bucket[buck].V[ind-1] = temp;
		}
		ind--;
	}
	
}

void Concat() { // concatenating each list into final array(vector)
	for(int i = 0; i<100; i++) {
		if(bucket[i].V.size() > 0) {
			for(int j = 0; j<bucket[i].V.size(); j++) {
				final.push_back(bucket[i].V[j]);
			}
		}
	}
}


void Print() {
	for(int i = 0; i<final.size(); i++) {
		printf(" %d",final[i]);
	}
}

void main() {
		int n, val;
		scanf("%d",&n); // total number of elements to be read
		for(int i = 0; i<n; i++) {
			scanf("%d",&val); // must be smaller than 10000
			Bucket_Sort(val);
		}
		Concat();
		printf("After Sort:");
		Print();
		puts("");
}