#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");
	}
}