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