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".
// package CodeForces;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.Comparator;
import java.util.StringTokenizer;

public class CF_486_2 {

	public static void main(String[] args) throws IOException{
		// TODO Auto-generated method stub
		Reader.init(System.in);
		int n = Reader.nextInt();
		String[] array = new String[n];
		
		for (int i = 0 ; i < n ; i++) {
			array[i] = Reader.next();
		}
		
		Arrays.sort(array, new Comparator<String>() {

			@Override
			public int compare(String arg0, String arg1) {
				// TODO Auto-generated method stub
				return arg0.length() - arg1.length();
			}
			
		});
		
		for (int i = 0 ; i < n - 1 ; i++) {
			String str1 = array[i];
			String str2 = array[i+1];
			if (!str2.contains(str1)) {
//				System.out.println(str2 + " does not"  + str1);
				System.out.println("NO");
				return;
			}
		}
		System.out.println("YES");
		for (int i = 0 ; i < n ; i++) {
			System.out.println(array[i]);
		}
	}

}
class Reader {
	static BufferedReader Reader;
	static StringTokenizer tokenizer;
	/** call this method to initialize Reader for InputStream */
	static void init(InputStream input) {
		Reader = new BufferedReader(
				new InputStreamReader(input) );
		tokenizer = new StringTokenizer("");
	}

	/** get next word */
	static String next() throws IOException {
		while ( ! tokenizer.hasMoreTokens() ) {
			//TODO add check for if necessary
			tokenizer = new StringTokenizer(
					Reader.readLine() );
		}
		return tokenizer.nextToken();
	}

	static int nextInt() throws IOException {
		return Integer.parseInt( next() );
	}

	static float nextFloat() throws IOException {
		return Float.parseFloat( next() );
	}
	static double nextDouble() throws IOException {
		return Double.parseDouble( next() );
	}
}