#include <iostream>
using namespace std;
void Merge(int A[], int p, int q, int r)
{
//将两个有序序列A[p...q],A[q+1...r]合并成一个有序序列A[p...r]
int n1 = q-p+1; //A[p...q]元素数目
int n2 = r-q; //A[q+1...r]元素数目
int B[n1];
int C[n2];
for (int i=p; i<=q; i++)
{
B[i-p] = A[i]; //注:数组下标从0开始
}
for (int i=q+1; i<=r; i++)
{
C[i-q-1] = A[i];
}
B[n1] = INT_MAX; //哨兵
C[n2] = INT_MAX;
int i = 0;
int j = 0;
for (int k=p; k<=r; k++)
{
if (B[i] <= C[j]){
A[k] = B[i];
i++;
} else {
A[k] = C[j];
j++;
}
}
}
void MergeSort(int A[], int p, int r)
{
//归并排序,分治法
if (p<r)
{
int q = (p+r)/2;
MergeSort(A, p, q);
MergeSort(A, q+1, r);
Merge(A,p,q,r);
}
}
int main()
{
int A[100];
int i = 0;
while (cin >> A[i])
{
i=i+1;
if (cin.get() == '\n') break;
}
int r = i;
MergeSort(A, 0, r-1);
for (int k=0; k<r; k++)
{
cout << A[k] << " ";
}
cout << endl;
return 0;
}