string s;
map<char, int> pos;
bool comp(string s1, string s2) {
int len = min(s1.size(), s2.size());
for (int i = 0; i < len; ++i) {
if (pos[s1[i]] < pos[s2[i]]) return true;
else if (pos[s1[i]] > pos[s2[i]]) return false;
}
if (s1.size() == s2.size()) return true;
else {
if (len == s1.size()) return true;
else return false;
}
}
void solve()
{
cin >> s;
for (int i = 0; i < 26; ++i) {
pos[s[i]] = i;
pos['A' + s[i] - 'a'] = i + 26;
}
int n; cin >> n;
vector<string> a(n);
for (int i = 0; i < n; ++i) cin >> a[i];
sort(a.begin(), a.end(), comp);
for (int i = 0; i < n; ++i) cout << a[i] << endl;
cout << endl;
}