
#include <iostream>
#include <list>
#include <map>
#include <set>
#include <sstream>
#include <string>
using namespace std;

template<typename T>
bool
atLeast2(const T& a)
{
	auto i = a.begin();

	if (i == a.end())
		return false;

	if (++i == a.end())
		return false;

	return true;
}

template<typename T>
list<T>
merge(list<T>&& a, list<T>&& b)
{
	list<T> c;

	while (!a.empty() && !b.empty()) {
		if (a.front() < b.front()) {
			c.push_back(move(a.front()));
			a.pop_front();
		} else {
			c.push_back(move(b.front()));
			b.pop_front();
		}
	}

	while (!a.empty()) {
		c.push_back(move(a.front()));
		a.pop_front();
	}
	while (!b.empty()) {
		c.push_back(move(b.front()));
		b.pop_front();
	}

	return c;
}

template<typename T>
void
mergesort(list<T>& seznam)
{
	if (seznam.empty())
		return;

	list<list<T>> lst;
	for (auto& t : seznam) {
		list<T> item;
		item.push_back(move(t));
		lst.push_back(move(item));
	}

	while (atLeast2(lst)) {
		list<T> a = move(lst.front());
		lst.pop_front();
		list<T> b = move(lst.front());
		lst.pop_front();
		lst.push_back(merge(move(a), move(b)));
	}

	seznam = move(lst.front());
}

int
main()
{
	multiset<int> sets;
	for (int i; cin >> i; sets.insert(i))
		;
	for (auto i : sets)
		cout << i << endl;
	return 0;
}

int
main2()
{
	list<string> seznam;
	for (string str; getline(cin, str);) {
		seznam.emplace_back(move(str));
	}

	mergesort(seznam);

	for (auto& s : seznam)
		cout << s << endl;

	return 0;
}

int
main1()
{
	map<string, int> histogram;

	for (string str; getline(cin, str);) {
		stringstream strs(str);
		for (string w; strs >> w;) {
			histogram[w]++;
		}
	}

	for (auto& i : histogram) {
		cout << i.first;
		for (int j = 0; j < i.second; j++)
			cout << '*';
		cout << '\n';
	}
	return 0;
}
