#include "bits/stdc++.h"
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
#define rep(i,n) for(ll i=0;i<(ll)(n);i++)
#define all(a)  (a).begin(),(a).end()
#define vi vector<int>
#define pb push_back
#define INF 999999999
//#define INF (1LL<<59)
 
bool hasCircle;
 
bool add_edge(string a,string b,set<int> graph[30]){
    bool flag = true;
    rep( i , min(a.size(),b.size()) ){
        if(a[i]!=b[i]){
            graph[ b[i]-'a' ].insert( a[i]-'a' );
//            cout<<b[i]<<">"<<a[i]<<endl;
            flag=false;
            break;
        }
    }
    if(flag){
        if(a.size()>b.size()){
            return false;
        }
    }
    return true;
}
 
 
void dfs(int pos,bool used[30],set<int> graph[30]){
    if( used[pos] ){    //??¢????????????????????????
//        cout<<pos<<endl;
        hasCircle=true; //????????°???true???????????????
        return ;
    }
    
    used[pos]=true;
    for(auto &to:graph[pos]){
        dfs(to,used,graph);
    }
    used[pos]=false;
}
 
 
int main(){
    int n;
    while(cin>>n&&n){
        vector<string> s(n);
        rep(i,n){
            cin>>s[i];
        }
        
        set<int> graph[30];
        
        rep(i,n){
            for(int j=i+1;j<n;j++){
                if( add_edge(s[i],s[j],graph) == false ){
                    cout<<"no"<<endl;
                    goto next;
                }
            }
        }
        
//        rep(i,26){
//            for(auto &elm:graph[i]){
//                cout<<i<<"->"<<elm<<endl;
//            }
//        }
        
        
        hasCircle = false;
        rep(i,26){
            bool used[30];
            rep(j,30)used[j]=false;
            dfs(i,used,graph);
            if(hasCircle)break;
        }
        if( hasCircle )cout<<"no"<<endl;
        else cout<<"yes"<<endl;
        
        next:;
    }
    
}