#include<stdio.h>
#include<stdlib.h>
#include<string.h>

void mergesort_(int a[], int b[], int l, int r);
void mergesort(int a[], int n);

void mergesort_(int a[], int b[], int l, int r) {
	int c;
	int i;
	int j;
	int k;
	int n;
	
	if (l >= r) {
		return;
	}

	c = ((r - l) >> 1) + l;
	mergesort_(a, b, l, c);
	mergesort_(a, b, c + 1, r);
	
	j = 0;
	for (i = l; i <= c; i++) {
		b[j] = a[i];
		j++;
	}
	
	i = 0;
	k = c + 1;
	n = l;
	
	while (k <= r) {
		if (j <= i) {
			return;
		}
		
		if (b[i] <= a[k]) {
			a[n] = b[i];
			n++;
			i++;
		} else {
			a[n] = a[k];
			n++;
			k++;
		}
	}
	
	while (i < j) {
		a[n] = b[i];
		n++;
		i++;
	}
}

void mergesort(int a[], int n) {
	int *b = calloc(n >> 1, sizeof(int));
	mergesort_(a, b, 0, n - 1);
	free(b);
}

int main(void) {
	FILE *fin;
	char buf[256];
	char *token;
	int nums[10];
	int i;
	
	fin = fopen("numbers.dat", "r");
	fgets(buf, 256, fin);
	fclose(fin);

	token = strtok(buf, " ");
	for (i = 0; i < 10; i++) {
		nums[i] = atoi(token);
		token = strtok(NULL, " ");
	}
	
	mergesort(nums, 10);
	
	for (i = 0; i < 10; i++) {
		printf("%d ", nums[i]);
	}
	
	return 0;
}