#include<bits/stdc++.h>
#define rep(i,n)for(int i=0;i<n;i++)
using namespace std;

string s[500], t[500];
vector<int>E[26];
int in[26], d[26], p;
bool used[26];
int main() {
	int n;
	while (scanf("%d", &n), n) {
		memset(used, 1, sizeof(used));
		memset(in, 0, sizeof(in));
		rep(i, 26)E[i].clear();
		rep(i, n) {
			cin >> s[i]; t[i] = s[i];
			for (char c : s[i])used[c - 'a'] = false;
		}
		rep(i, 10) {
			rep(j, n)for (int k = j + 1; k < n; k++) {
				if (i < s[j].size() && i < s[k].size() && s[j][i] != s[k][i] && s[j].substr(0, i) == s[k].substr(0, i)) {
					in[s[k][i] - 'a']++; E[s[j][i] - 'a'].push_back(s[k][i] - 'a');
				}
			}
		}
		queue<int>Q;
		p = 0;
		rep(i, 26) {
			if (!in[i] && !used[i])Q.push(i);
			while (!Q.empty()) {
				int u = Q.front(); Q.pop();
				used[u] = true; d[u] = p++;
				for (int v : E[u]) {
					in[v]--; if (!in[v])Q.push(v);
				}
			}
		}
		rep(i, 26) {
			if (!used[i]) {
				puts("no"); goto g;
			}
		}
		sort(t, t + n, [&](string a, string b) {
			rep(i, min(a.size(), b.size())) {
				if (a[i] != b[i])return d[a[i] - 'a'] < d[b[i] - 'a'];
			}
			return a.size() < b.size();
		});
		rep(i, n) {
			if (s[i] != t[i]) {
				puts("no"); goto g;
			}
		}
		puts("yes");
	g:;
	}
}