
#include <iostream>

#include <cstdio>

using namespace std;


const int N = 100004;


typedef struct



{

int key[N];

int length;

}SqList;


void Merge(SqList &L, int low, int mid, int high)



{//int p,int q,int r

int n1, n2;

int i, j, k;


//=========以下开辟二个辅助数组=========


n1 = mid - low + 1;

n2 = high - mid;

int *Left = new int[n1 + 1], *Right= new int[n2 + 1];

for(i = 0; i < n1; i++)

Left[i] = L.key[low + i];

for(i = 0;i < n2; i++)

Right[i] = L.key[mid + i + 1];


for(i = j = 0, k = low; k <= high; k++)

if(i == n1)


{

while(k <= high)

L.key[k++] = Right[j++];

break;

}

else if(j == n2)


{

while(k <= high)

L.key[k++] = Left[i++];

break;

}

else if(Left[i] <= Right[j])

L.key[k] = Left[i++];

else

L.key[k] = Right[j++];

}


void MergeSort(SqList &L, int l, int h)



{

int low = l, high = h, mid;


if(low < high)


{

mid = (low + high) / 2;

MergeSort(L,low,mid);// the left

MergeSort(L,mid + 1, high);// the right

Merge(L, low, mid, high);

}

}


int main()



{

SqList L;

L.length = 0;

while(scanf("%d", &L.key[++L.length]) != EOF)

;

L.length--;

MergeSort(L, 1, L.length);

for(int i = 1; i <= L.length; i++)

if(i != L.length)

printf("%d ", L.key[i]);

else

printf("%d\n", L.key[i]);

return 0;

}