Problem:
MathJax.Hub.Config({
tex2jax: {inlineMath: [['$','$'], ['\\(','\\)']]}
});

Airport Codes

空港コード

JAG王国では国内の空港にそれぞれ空港コードを割り当てて識別をしている．

空港コードは，小文字の英語アルファベットで表記した空港の名前をもとに以下の規則で割り当てられる:

名前の最初の文字と，母音 (a,i,u,e,o) の直後の文字を順に取り出す．

取り出した文字列が k 文字未満ならそれを空港コードとし， k 文字以上なら，その取り出した文字列の先頭 k 文字を空港コードとして使う．

例えば k = 3 のとき，haneda には hnd ， oookayama には ooo ， tsu には t というコードが割り当てられる．

しかしこのコードの割り当て方では，違う名前の空港でも同じコードが割り当てられることがあり，混乱を招いてしまう．
空港の名前の一覧が与えられるので，すべての空港のコードが異なるようにできるか判定して，可能な場合はすべての空港コードが異なるようにできる最小の k を求め，不可能な場合はその旨を伝えるプログラムを作成せよ．

Input

入力は100個以下のデータセットからなる．
それぞれのデータセットは次の形式で与えられる．

n
s1
...
sn

1行目に空港の数 n (2 ≤ n ≤ 50) が整数で与えられ，続く n 行にはそれぞれ空港の名前 si が文字列で与えられる．
空港の名前は'a'から'z'の小文字の英語アルファベットのみで構成され，いずれも文字数は1以上50以下である．
また，与えられる空港の名前はすべて異なる．すなわち，1 ≤ i < j ≤ n のとき si ≠ sj を満たす．

入力の終わりは1つのゼロだけからなる行で示される．

Output

それぞれのデータセットについて，すべての空港に相異なる空港コードを割り当てられるときは，そのような最小の k を1行に出力せよ．
不可能な場合は，-1を1行に出力せよ．

Sample Input

3
haneda
oookayama
tsu
2
azusa
azishirabe
2
snuke
snake
4
haneda
honda
hanamaki
hawaii
0

Output for Sample Input

1
4
-1
3

Solution in JAVA (judge verdict: Accepted)

import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.util.InputMismatchException;
import java.util.NoSuchElementException;

public class Main{

	static PrintWriter out;
	static InputReader ir;

	static void solve(){
		for(;;){
            int n=ir.nextInt();
            if(n==0)
                break;
            char[][] ap=new char[n][];
            String[] cd=new String[n];
            int ma=0;
            for(int i=0;i<n;i++){
            	ap[i]=ir.next().toCharArray();
            	cd[i]=Character.toString(ap[i][0]);
            	for(int j=0;j<ap[i].length-1;j++){
            		if(ap[i][j]=='a'||ap[i][j]=='i'||ap[i][j]=='u'||ap[i][j]=='e'||ap[i][j]=='o'){
            			cd[i]+=Character.toString(ap[i][j+1]);
            		}
            	}
            	ma=Math.max(ma,cd[i].length());
            }
            outer:
            for(int i=0;i<ma;i++){
            	for(int j=0;j<n;j++){
            		for(int k=j+1;k<n;k++){
            			if(code(cd[j],i+1).equals(code(cd[k],i+1))){
            				if(i==ma-1)
            					out.println(-1);
            				continue outer;
            			}
            		}
            	}
            	out.println(i+1);
            	break;
            }
        }
	}

	static String code(String s,int k){
		if(s.length()<=k) return s;
		return s.substring(0,k);
	}

	public static void main(String[] args) throws Exception{
		ir=new InputReader(System.in);
		out=new PrintWriter(System.out);
		solve();
		out.flush();
	}

	static class InputReader {

		private InputStream in;
		private byte[] buffer=new byte[1024];
		private int curbuf;
		private int lenbuf;

		public InputReader(InputStream in) {this.in=in; this.curbuf=this.lenbuf=0;}

		public boolean hasNextByte() {
			if(curbuf>=lenbuf){
				curbuf= 0;
				try{
					lenbuf=in.read(buffer);
				}catch(IOException e) {
					throw new InputMismatchException();
				}
				if(lenbuf<=0) return false;
			}
			return true;
		}

		private int readByte(){if(hasNextByte()) return buffer[curbuf++]; else return -1;}

		private boolean isSpaceChar(int c){return !(c>=33&&c<=126);}

		private void skip(){while(hasNextByte()&&isSpaceChar(buffer[curbuf])) curbuf++;}

		public boolean hasNext(){skip(); return hasNextByte();}

		public String next(){
			if(!hasNext()) throw new NoSuchElementException();
			StringBuilder sb=new StringBuilder();
			int b=readByte();
			while(!isSpaceChar(b)){
				sb.appendCodePoint(b);
				b=readByte();
			}
			return sb.toString();
		}

		public int nextInt() {
			if(!hasNext()) throw new NoSuchElementException();
			int c=readByte();
			while (isSpaceChar(c)) c=readByte();
			boolean minus=false;
			if (c=='-') {
				minus=true;
				c=readByte();
			}
			int res=0;
			do{
				if(c<'0'||c>'9') throw new InputMismatchException();
				res=res*10+c-'0';
				c=readByte();
			}while(!isSpaceChar(c));
			return (minus)?-res:res;
		}

		public long nextLong() {
			if(!hasNext()) throw new NoSuchElementException();
			int c=readByte();
			while (isSpaceChar(c)) c=readByte();
			boolean minus=false;
			if (c=='-') {
				minus=true;
				c=readByte();
			}
			long res = 0;
			do{
				if(c<'0'||c>'9') throw new InputMismatchException();
				res=res*10+c-'0';
				c=readByte();
			}while(!isSpaceChar(c));
			return (minus)?-res:res;
		}

		public double nextDouble(){return Double.parseDouble(next());}

		public int[] nextIntArray(int n){
			int[] a=new int[n];
			for(int i=0;i<n;i++) a[i]=nextInt();
			return a;
		}

		public long[] nextLongArray(int n){
			long[] a=new long[n];
			for(int i=0;i<n;i++) a[i]=nextLong();
			return a;
		}

		public char[][] nextCharMap(int n,int m){
			char[][] map=new char[n][m];
			for(int i=0;i<n;i++) map[i]=next().toCharArray();
			return map;
		}
	}
}