Problem Statement

We found a dictionary of the Ancient Civilization Mayo (ACM) during excavation of the ruins. After analysis of the dictionary, we revealed they used a language that had not more than 26 letters. So one of us mapped each letter to a different English alphabet and typed all the words in the dictionary into a computer.

How the words are ordered in the dictionary, especially whether they are ordered lexicographically, is an interesting topic to many people. As a good programmer, you are requested to write a program to judge whether we can consider the words to be sorted in a lexicographical order.

Note: In a lexicographical order, a word always precedes other words it is a prefix of. For example, `ab` precedes `abc`, `abde`, and so on.



Input

The input consists of multiple datasets. Each dataset is formatted as follows:


n
string_1
...
string_n


Each dataset consists of n+1 lines. The first line of each dataset contains an integer that indicates n (1 \leq n \leq 500). The i-th line of the following n lines contains string_i, which consists of up to 10 English lowercase letters.

The end of the input is `0`, and this should not be processed.

Output

Print either `yes` or `no` in a line for each dataset, in the order of the input. If all words in the dataset can be considered to be ordered lexicographically, print `yes`. Otherwise, print `no`.

Example

Input

4
cba
cab
b
a
3
bca
ab
a
5
abc
acb
b
c
c
5
abc
acb
c
b
b
0


Output

yes
no
yes
no
#include "bits/stdc++.h"
using namespace std;

#define FOR(i,a,b) for(int i=a;i<b;i++)
#define rep(i,b) FOR(i,0,b)
string str[510];

bool has_loop(vector<vector<int>> G){
    int n=G.size();
    rep(k,n){
        rep(i,n){
            rep(j,n){
                G[i][j]=min(G[i][j],G[i][k]+G[k][j]);
            }
        }
    }
    rep(i,n){
        if(G[i][i]<1e9)return true;
    }
    return false;
}

int main(){
    int n;
    int max_len=0;

    while(cin>>n,n){
        vector<string> s(n);
        rep(i,n)cin>>s[i];

        if(n==1){
            cout<<"yes"<<endl;
            continue;
        }

        vector<vector<int>> G(26,vector<int>(26,1e9));
        bool f=true;
        for(int i=1;i<n;i++){
            if(s[i-1]==s[i])continue;
            rep(j,min(s[i].size(),s[i-1].size())){
                f=true;
                if(s[i][j]!=s[i-1][j]){
                    G[s[i-1][j]-'a'][s[i][j]-'a']=1;
                    f=false;
                    break;
                }
            }

            if(f&&s[i-1].size()>s[i].size()){
                cout<<"no"<<endl;
                goto E;
            }else{
                f=false;
            }
        }
        if(has_loop(G))cout<<"no"<<endl;
        else cout<<"yes"<<endl;
        E:;
    }



}
