#include <bits/stdc++.h>

using namespace std;

vector<vector<int>> G;

void warshall_floyd(int n) {
    for (int k = 0; k < n; k++){       // 経由する頂点
        for (int i = 0; i < n; i++) {    // 始点
            for (int j = 0; j < n; j++) {  // 終点
                if(G[i][k]!=10&&G[k][j]!=10)G[i][j] = min(G[i][j], G[i][k] + G[k][j]);
            }
        }
    }
}

bool solve(){
    int n;
    cin>>n;
    if(n==0)return false;

    G.assign(26,vector<int>(26,10));
    for (int i = 0; i < 26; ++i) {
        G[i][i]=0;
    }
    vector<string> vs(n);
    for (int i = 0; i < n; ++i) {
        cin>>vs[i];
    }
    for (int i = 1; i < n; ++i) {
        int ind=0;
        if(vs[i]==vs[i-1])continue;
        while(vs[i].size()>=ind+1&&vs[i-1].size()>=ind+1&&vs[i][ind]==vs[i-1][ind]){
            ++ind;
        }
        if(vs[i].size()>=ind+1&&vs[i-1].size()>=ind+1){
            G[vs[i-1][ind]-'a'][vs[i][ind]-'a']=-1;
            //G[vs[i][ind]-'a'][vs[i-1][ind]-'a']=-1;
        }
        else{
            if(vs[i-1].size()>vs[i].size()&&vs[i].front()==vs[i-1].front()){
                cout<<"no"<<endl;
                return true;
            }
        }
    }
    warshall_floyd(26);
/*
    for (int i = 0; i < 26; ++i) {
        for (int j = 0; j < 26; ++j) {
            cout<<G[i][j]<<" ";
        }
        cout<<endl;
    }
*/
    for (int i = 0; i < 26; ++i) {
        if(G[i][i]<0){
            cout<<"no"<<endl;
            return true;
        }
    }
    cout<<"yes"<<endl;
    return true;
}

int main(){
    while(solve());
    return 0;
}
