//思路:最近在练习大整数,所以用大整数,可以直接用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;
}