You are given n strings. Each string consists of lowercase English letters. Rearrange (reorder) the given strings in such a way that for every string, all strings that are placed before it are its substrings.

String a is a substring of string b if it is possible to choose several consecutive letters in b in such a way that they form a. For example, string "for" is contained as a substring in strings "codeforces", "for" and "therefore", but is not contained as a substring in strings "four", "fofo" and "rof".

Input

The first line contains an integer n (1 ≤ n ≤ 100) — the number of strings.

The next n lines contain the given strings. The number of letters in each string is from 1 to 100, inclusive. Each string consists of lowercase English letters.

Some strings might be equal.

Output

If it is impossible to reorder n given strings in required order, print "NO" (without quotes).

Otherwise print "YES" (without quotes) and n given strings in required order.

Examples

Input

5
a
aba
abacaba
ba
aba


Output

YES
a
ba
aba
aba
abacaba


Input

5
a
abacaba
ba
aba
abab


Output

NO


Input

3
qwerty
qwerty
qwerty


Output

YES
qwerty
qwerty
qwerty

Note

In the second example you cannot reorder the strings because the string "abab" is not a substring of the string "abacaba".
import java.util.*;
import java.io.*;
/*
4
aba
a
ba
abaab
 */
public class subtringssort {
    public static void main(String[] args) throws IOException {
        //Scanner input = new Scanner(new BufferedReader(new FileReader("subtringssort.in")));
        //PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter("subtringssort.out")));
        Scanner input = new Scanner(System.in);
        int n = input.nextInt();
        ArrayList<String> start = new ArrayList<>();
        String[] order = new String[n];
//        System.out.println(Arrays.toString(order));
        for (int i = 0; i < n; i++){
            start.add(input.next());
        }
//        System.out.println(start.remove(0));
//        System.out.println(start.toString());
        int index = 0;
        while (!start.isEmpty()){
            int min = 101;
            LinkedList<Integer> ans = new LinkedList<>();
            int a = start.size();
            for (int i = 0; i < a; i++){
                if (start.get(i).length() < min){
                    min = start.get(i).length();
                    ans.clear();
                    ans.add(i);
                }
                else if (start.get(i).length() == min){
                    ans.add(i);
                }
            }
//            System.out.println("start "+start.toString());
//            System.out.println("ans "+ans.toString());
            if (index == 0){
                order[index] = start.get(ans.getFirst());
                int j = ans.getFirst();
                start.remove(j);
//                System.out.println(ans.getFirst());
//                System.out.println("removed "+start.toString());
                ans.clear();
                index++;

            }
            else{
                boolean found = false;
                for (int i = 0; i < ans.size(); i++){
//                    System.out.println("index "+index+" array "+Arrays.toString(order));
                    String b = order[index-1];
                    String f = start.get(ans.get(i));
                    if (f.contains(b)){
                        int g = ans.get(i);
                        start.remove(g);
                        order[index] = f;
                        index++;
                        ans.clear();
                        found = true;
                        break;
                    }
                }
                if (!found){
                    System.out.println("NO");
                    System.exit(0);

                }
            }


        }
//        System.out.println("__________");
        System.out.println("YES");
        for (String i : order){
            System.out.println(i);
        }


    }
}
