//思路:最近在练习大整数,所以用大整数,可以直接用string类的比较大小的方法,长度相同的比较每一位,不同的则长的大
//string 用大整数储存法,然后定义结构体,重载<符号,
//用sort进行排序
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
struct M
{
  int dig[1000];
  int size;//保存大整数的位数
  void init()//先初始化
  {
    size=0;
    for(int i=0;i<1000;i++)
      dig[i]=0;
  }
  void set(string &s)//这里我用的是1位整数按高位到地位顺序保存到一个数组单位中,如果4位一保存
  {                  //在比较size相同的时候会出现复杂情况,故此回避,牺牲空间
    init();
    int len=s.length();
      for(int j=0;j<len;j++)
      {
          dig[j]=s[j]-'0';
          size++;
      }
  }
  bool operator<(M&a)
  {
    if(size!=a.size)//位数长的数更大
      return size<a.size;
    else 
      for(int i=0;i<size;i++)//位数相同,则开始遍历到出现有一位数不同时,判断大小
        if(dig[i]!=a.dig[i])
          return dig[i]<a.dig[i];
  }
}buf[100];
string s[100];
int main()
{
  int n;
  while(cin>>n)
  {
    for(int i=0;i<n;i++)
    {
      cin>>s[i];
      buf[i].set(s[i]);
    }
    sort(buf,buf+n);
    for(int i=0;i<n;i++)
    {
      for(int j=0;j<buf[i].size;j++)
        cout<<buf[i].dig[j];
      cout<<endl;
    }
  }
  return 0;
}