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
#include <bits/stdc++.h>
#define rep(i,n) for(int i=0;i<(int)(n);i++)
#define rep1(i,n) for(int i=1;i<=(int)(n);i++)
#define all(c) c.begin(),c.end()
#define pb push_back
#define fs first
#define sc second
#define show(x) cout << #x << " = " << x << endl
#define chmin(x,y) x=min(x,y)
#define chmax(x,y) x=max(x,y)
using namespace std;
bool vis[26],now[26];
vector<int> G[26];
bool dfs(int v){
	vis[v]=1;
	now[v]=1;
	for(int u:G[v]){
		if(now[u]){
			now[v]=0;
			return 1;
		}
		if(!vis[u]){
			bool b=dfs(u);
			if(b){
				now[v]=0;
				return 1;
			}
		}
	}
	now[v]=0;
	return 0;
}
bool solve(int N){
	rep(i,26) vis[i]=now[i]=0,G[i].clear();
	string s_[500];
	rep(i,N) cin>>s_[i];
	rep(i,N-1){
		string s=s_[i],t=s_[i+1];
		int S=s.size(),T=t.size();
		int j=0;
		while(j<S&&j<T&&s[j]==t[j]) j++;
		if(j==S) continue;
		if(j==T) return 0;
		G[s[j]-'a'].pb(t[j]-'a');
	}
	bool no=0;
	rep(i,26){
		if(!vis[i]) no|=dfs(i);
	}
	return !no;
}
int main(){
	while(true){
		int N;
		cin>>N;
		if(N==0) break;
		if(solve(N)) puts("yes");
		else puts("no");
	}
}