// cas O((N+1)! lg N)
#include <cstdio>
#include <set>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
int N;
scanf(" %d",&N);
vector<pair<long long,long long> > f(N);
vector<int> p(N); // pouzita permutacia
for(int i =0; i < N; i++) {
p[i] =i;
long long a;
scanf(" %lld",&a);
f[i].second =0LL;
f[i].first =a;
// zratam pocet cifier fragmentu
while(a > 0LL) {a /=10LL; f[i].second++;}}
set<long long> odp;
while(true) {
// v lubovolnom poradi na seba nalepim fragmenty
long long a =0LL,b =1LL;
for(int i =0; i < N; i++) {
a +=f[p[i]].first*b;
for(int j =0; j < f[p[i]].second; j++) b *=10LL;}
odp.insert(a);
if(!next_permutation(p.begin(),p.end())) break;}
for(set<long long>::iterator it =odp.begin(); it != odp.end(); it++) printf("%lld\n",*it);
return 0;}
Ly8gY2FzIE8oKE4rMSkhIGxnIE4pCiNpbmNsdWRlIDxjc3RkaW8+CiNpbmNsdWRlIDxzZXQ+CiNpbmNsdWRlIDx2ZWN0b3I+CiNpbmNsdWRlIDxhbGdvcml0aG0+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgppbnQgbWFpbigpIHsKCWludCBOOwoJc2NhbmYoIiAlZCIsJk4pOwoJdmVjdG9yPHBhaXI8bG9uZyBsb25nLGxvbmcgbG9uZz4gPiBmKE4pOwoJdmVjdG9yPGludD4gcChOKTsgLy8gcG91eml0YSBwZXJtdXRhY2lhCglmb3IoaW50IGkgPTA7IGkgPCBOOyBpKyspIHsKCQlwW2ldID1pOwoJCWxvbmcgbG9uZyBhOwoJCXNjYW5mKCIgJWxsZCIsJmEpOwoJCWZbaV0uc2Vjb25kID0wTEw7CgkJZltpXS5maXJzdCA9YTsKCQkvLyB6cmF0YW0gcG9jZXQgY2lmaWVyIGZyYWdtZW50dQoJCXdoaWxlKGEgPiAwTEwpIHthIC89MTBMTDsgZltpXS5zZWNvbmQrKzt9fQoJc2V0PGxvbmcgbG9uZz4gb2RwOyAKCXdoaWxlKHRydWUpIHsKCQkvLyB2IGx1Ym92b2xub20gcG9yYWRpIG5hIHNlYmEgbmFsZXBpbSBmcmFnbWVudHkKCQlsb25nIGxvbmcgYSA9MExMLGIgPTFMTDsgCgkJZm9yKGludCBpID0wOyBpIDwgTjsgaSsrKSB7CgkJCWEgKz1mW3BbaV1dLmZpcnN0KmI7CgkJCWZvcihpbnQgaiA9MDsgaiA8IGZbcFtpXV0uc2Vjb25kOyBqKyspIGIgKj0xMExMO30KCQlvZHAuaW5zZXJ0KGEpOwoJCWlmKCFuZXh0X3Blcm11dGF0aW9uKHAuYmVnaW4oKSxwLmVuZCgpKSkgYnJlYWs7fQoJZm9yKHNldDxsb25nIGxvbmc+OjppdGVyYXRvciBpdCA9b2RwLmJlZ2luKCk7IGl0ICE9IG9kcC5lbmQoKTsgaXQrKykgcHJpbnRmKCIlbGxkXG4iLCppdCk7CglyZXR1cm4gMDt9