import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
import java.util.stream.Collectors;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {


    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        // 文件数量
        int c =  Integer.valueOf(in.nextLine());
        List<List<String>> lists = new ArrayList<>();
        for (int i = 0; i < c; i++) {
            List<String> alist = new ArrayList<>();
            String str = in.nextLine();
            char[] chars = str.toCharArray();
            boolean isNum = false;
            String astr = "";
            for (char achar : chars) {
                // 上一个字符是数字
                if (isNum) {
                    // 这一个还是数字
                    if (Character.isDigit(achar)) {
                        astr += achar;
                    } else {
                        // 这一个不是数字
                        if (!astr.equals("")) {
                            // 把之前的加到list
                            alist.add(astr);
                        }
                        // 置空在加上
                        astr = "";
                        astr += achar;
                        isNum = false;
                    }
                } else { // 上一个不是数字

                    // 这一个是数字
                    if (Character.isDigit(achar)) {
                        if (!astr.equals("")) {
                            // 把之前的加到list
                            alist.add(astr);
                        }
                        // 置空在加上
                        astr = "";
                        astr += achar;
                        isNum = true;
                    } else {
                        astr += achar;
                    }

                }

            }
            // 如果循环之后 astr 不是空最后要加上
            if (!astr.equals("")) {
                alist.add(astr);
            }
            lists.add(alist);
        }
      lists =  lists.stream().sorted((l1, l2)-> {
            int len  =  l1.size() > l2.size() ? l2.size() : l1.size();
            for (int i = 0; i < len; i++) {
                String s1 =  l1.get(i);
                String s2 =  l2.get(i);
                boolean  isDigitS1 = Character.isDigit(s1.charAt(0));
                boolean  isDigitS2 = Character.isDigit(s2.charAt(0));
                // 都是数字
                if (isDigitS1 && isDigitS2) {
                    long n1 = Long.parseLong(s1);
                    long n2 = Long.parseLong(s2);
                    if (n1 != n2) {
                        // 如果不相等,那就直接比较他们的大小
                        return Long.compare(n1, n2);
                    }
                    // 相等
                    // 直接下一个循环
                    continue;
                }
                // 都不是数字
                if (!isDigitS1 && !isDigitS2) {
                    if (!s1.equals(s2)) {
                        return s1.compareTo(s2);
                    }
                    // 相等
                    // 直接下一个循环
                    continue;
                }
                // 其中一个是
                // 谁是数字谁排前面
                return isDigitS1 ? -1 : 1;

            }


            // 前面比对都一样,那么就判断是不是子序
            return Integer.compare(l1.size(), l2.size());                  // 大小升序

        }).collect(Collectors.toList());

        String oneBlock = lists.stream()
                          .map(inner -> String.join("", inner)) // 子 List 拼一行
                          .collect(Collectors.joining(System.lineSeparator())); // 行间换行

        System.out.println(oneBlock);

    }
}