/*
4424
#include <stdio.h>
int main()
{
int n,i;
double arr[10001], arrm[10001]={}, max=0;
scanf("%d", &n);
for(i=1;i<=n;i++)
{
scanf("%lf", &arr[i]);
}
for(i=2;i<=n;i++)
{
if(arr[i-1]>1)
{
arr[i]=arr[i-1]*arr[i];
}
arrm[i]=arr[i];
}
for(i=1;i<=n;i++)
{
if (arrm[i]>max)
{
max=arrm[i];
}
}
printf("%.3lf", max);
return 0;
}
*/
/*
4776
#include <stdio.h>
int main()
{
int n,a,b;
scanf("%d", &n);
n=n-4;
b=n%12+65;
a=n%10;
printf("%c%d", b,a);
return 0;
}
*/
/*
4833
#include <stdio.h>
int main()
{
int top=0,sum=0,i;
char str[100001];
scanf("%s", str);
for(i=0;str[i]!=NULL;i++)
{
if(str[i]=='('&& str[i+1]!=')')
{
top++;
}
else if(str[i]=='('&&str[i+1]==')')
{
sum+=top;
i++; //한칸 무시하고 지나갈때
}
else if (str[i]==')')
{
top--;
sum++;
}
}
printf("%d", sum);
return 0;
}
*/
/*
4564*****
#include <stdio.h>
int max(int a,int b)
{
if(a>b) return a;
else return b;
}
int main()
{
int n, arr[301]={},memo[301]={},i,a,b;
scanf("%d", &n);
for(i=1;i<=n;i++)
{
scanf("%d", &arr[i]);
}
for(i=1;i<=n;i++)
{
if(i==1) memo[i]=arr[1];
else if(i==2) memo[i]=arr[1]+arr[2];
else if(i==3)
{
a=arr[1];
b=arr[2];
memo[i]=max(a,b)+arr[i];
}
else
{
a=memo[i-2];
b=memo[i-3]+arr[i-1];
memo[i]=max(a,b)+arr[i];
}
}
printf("%d", memo[n]);
return 0;
}
*/
/*
1452****
< 퀵정렬 >
#include <stdio.h>
void swap(int a, int b, int* arr)
{
int t=arr[a];
arr[a]=arr[b];
arr[b]=t;
}
void quick_sort(int s, int e, int* arr)
{
int pivot=s;
int low=s, high=e+1;
if(s==e) return ;
do
{
do
{
low++;
}while(arr[low]<arr[pivot]);
do
{
high--;
}while(arr[high]>arr[pivot]);
if(low<high) swap(low,high,arr);
}while(low<high);
swap(pivot,high,arr);
quick_sort(s,high-1,arr);
quick_sort(high+1,e,arr);
}
int main()
{
int n,i;
int ar[301]={};
scanf("%d", &n);
for(i=1;i<=n;i++)
{
scanf("%d", &ar[i]);
}
quick_sort(1,n,ar);
for(i=1;i<=n;i++)
{
printf("%d\n", ar[i]);
}
return 0;
}
*/
/*
//연습
#include <stdio.h>
void swap(int a, int b, int* arr)
{
int t=arr[a];
arr[a]=arr[b];
arr[b]=t;
}
void quick_sort(int s,int e, int*arr)
{
int pivot=s;
int low=s+1, high=e;
if(s==e) return;
do
{
while (arr[low]<arr[pivot]) low++;
while (arr[high]>arr[pivot]) high--;
}
}
int main()
{
int n,i;
int ar[301]={};
scnaf("%d", &n);
for(i=1;i<=n;i++)
{
scanf("%d" &ar[i]);
}
quick_sort(1,n,ar);
for(i=1;i<=n;i++)
{
printf("%d\n",ar[i]);
}
return 0;
}
*/
/*
//*선입선출(FIFO) <Queue>
#include <stdio.h>
#define SIZE 100 //(일회용)
int queue[SIZE];
int front=-1; //data가 마지막으로 나간 위치
int rear=-1; //data가 마지막으로 들어온 위치
void enqueue(int data) //stack에서의 push와 비슷
{
if(rear==SIZE-1) return ; //FULL
queue[++rear]=data;
}
int dequeue() //stack에서의 pop과 비슷
{
if(front==rear) return -1; //empty
return queue[++front];
}
int main()
{
enqueue(1);
enqueue(2);
enqueue(3);
printf("%d",dequeue());
}
*/
#include <stdio.h>
int arr[100001]={};
void swap(int a, int b)
{
int t=arr[a];
arr[a]=arr[b];
arr[b]=t;
}
void quick_sort(int s, int e)
{
int pivot=s;
int low=s, high=e+1;
if(s==e) return;
do
{
do
{
low++;
}while(arr[low]<arr[pivot]);
do
{
high--;
}while(arr[high]>arr[pivot]);
if(low<high) swap(low,high);
}while(low<high);
swap(pivot,high);
quick_sort(s,high-1);
quick_sort(high+1,e);
}
int main()
{
int n,i;
scanf("%d", &n);
for(i=1;i<=n;i++)
{
scanf("%d", &arr[i]);
}
quick_sort(1,n);
for(i=1;i<=n;i++)
{
printf("%d\n", arr[i]);
}
return 0;
}