#include <bits/stdc++.h>
using namespace std;
const int inf = 1e9;
const int AtoZ = 'z' - 'a';
bool check(int n, int b, int e, vector<string> &str,
           vector<vector<int> > &ord) {
  char now = str[b][n];
  int s = b;
  for (int i = b; i <= e; i++) {
    if (str[i][n] != now) {
      if (str[i][n] == '0') return false;
      if (now != '0') {
        ord[now - 'a'][str[i][n] - 'a'] = 0;
        if (!check(n + 1, s, i - 1, str, ord)) return false;
        s = i;
        now = str[i][n];
      }
    }
  }
  if (now != '0') {
    if (!check(n + 1, s, e, str, ord)) return false;
  }
  return true;
}
int main() {
  while (1) {
    int n;
    cin >> n;
    if (n == 0) break;
    vector<string> str(n);
    vector<vector<int> > ord(AtoZ, vector<int>(AtoZ, inf));
    for (int i = 0; i < n; i++) {
      cin >> str[i];
      str[i] += "0";
    }
    if (!check(0, 0, n - 1, str, ord)) {
      cout << "no" << endl;
      continue;
    }
    for (int k = 0; k < AtoZ; k++) {
      for (int i = 0; i < AtoZ; i++) {
        for (int j = 0; j < AtoZ; j++) {
          ord[i][j] = min(ord[i][j], ord[i][k] + ord[k][j]);
        }
      }
    }
    bool flag = true;
    for (int i = 0; i < AtoZ; i++) {
      for (int j = i + 1; j < AtoZ; j++) {
        if (ord[i][j] == 0 && ord[j][i] == 0) {
          flag = false;
          break;
        }
      }
    }
    if (flag) {
      cout << "yes" << endl;
    } else {
      cout << "no" << endl;
    }
  }
  return 0;
}
