Problem Statement

We found a dictionary of the Ancient Civilization Mayo (ACM) during excavation of the ruins. After analysis of the dictionary, we revealed they used a language that had not more than 26 letters. So one of us mapped each letter to a different English alphabet and typed all the words in the dictionary into a computer.

How the words are ordered in the dictionary, especially whether they are ordered lexicographically, is an interesting topic to many people. As a good programmer, you are requested to write a program to judge whether we can consider the words to be sorted in a lexicographical order.

Note: In a lexicographical order, a word always precedes other words it is a prefix of. For example, `ab` precedes `abc`, `abde`, and so on.



Input

The input consists of multiple datasets. Each dataset is formatted as follows:


n
string_1
...
string_n


Each dataset consists of n+1 lines. The first line of each dataset contains an integer that indicates n (1 \leq n \leq 500). The i-th line of the following n lines contains string_i, which consists of up to 10 English lowercase letters.

The end of the input is `0`, and this should not be processed.

Output

Print either `yes` or `no` in a line for each dataset, in the order of the input. If all words in the dataset can be considered to be ordered lexicographically, print `yes`. Otherwise, print `no`.

Example

Input

4
cba
cab
b
a
3
bca
ab
a
5
abc
acb
b
c
c
5
abc
acb
c
b
b
0


Output

yes
no
yes
no
#define _USE_MATH_DEFINES
#include <algorithm>
#include <cstdio>
#include <functional>
#include <iostream>
#include <cfloat>
#include <climits>
#include <cstring>
#include <cmath>
#include <map>
#include <queue>
#include <set>
#include <sstream>
#include <stack>
#include <string>
#include <time.h>
#include <vector>
using namespace std;

typedef long long ll;
typedef unsigned long long ull;
typedef pair<int, int> i_i;
typedef pair<ll, int> ll_i;
typedef pair<double, int> d_i;
typedef pair<ll, ll> ll_ll;
typedef pair<double, double> d_d;
struct edge { int u, v; ll w; };

ll MOD = 1000000007;
ll _MOD = 1000000009;
double EPS = 1e-9;

bool foo(vector< vector<int> >& a, int x, int y) {
	a[x][y] = 1;
	for (int u = 0; u < 26; u++)
		for (int v = 0; v < 26; v++)
			a[u][v] |= a[u][x] & a[x][v];
	for (int u = 0; u < 26; u++)
		if (a[u][u]) return false;
	return true;
}

bool bar(string& s, string& t, vector< vector<int> >& a) {
	int S = s.length(), T = t.length();
	int i;
	for (i = 0; i < S && i < T && s[i] == t[i]; i++);
	if (i == S) return true;
	if (i == T) return false;
	return foo(a, s[i] - 'a', t[i] - 'a');
}

int main() {
	for (;;) {
		int n; cin >> n;
		if (n == 0) break;
		vector<string> s(n);
		for (int j = 0; j < n; j++)
			cin >> s[j];
		vector< vector<int> > a(26, vector<int>(26));
		bool flag = true;
		for (int j = 0; j + 1 < n; j++) {
			if (!bar(s[j], s[j + 1], a)) {
				flag = false;
				break;
			}
		}
		cout << (flag ? "yes" : "no") << endl;
	}
}