#include <bits/stdc++.h>

#define MAXN 15
using namespace std;

/*
3 2
a
ba
ab
*/
queue<string> q;
bool moze(string s,int N, int* L, char** A){
    for(int k=0;k<N;k++){
        int brp=0;
        if(s.size()<L[k])
            return false;
        for(int i=0;i<s.size();i++){
            if(s[i]==A[k][0]){
                bool mark1=true;
                for(int j=0;j<L[k];j++){
                    //cout<<A[k][j];
                    if(A[k][j]!=s[i+j]){
                        mark1=false;
                        break;
                    }
                }
                if(mark1)
                    brp++;
            }
            if(brp==0)
                return false;
        }
    }
    return true;
}
bool moze1(string s,int N, int* L, char** A){
    for(int k=0;k<N;k++){
        int brp=0;
        if(s.size()<L[k])
            return true;
        for(int i=0;i<s.size();i++){
            if(s[i]==A[k][0]){
                bool mark1=true;
                for(int j=0;j<L[k];j++){
                    //cout<<A[k][j];
                    if(A[k][j]!=s[i+j]){
                        mark1=false;
                        break;
                    }
                }
                if(mark1)
                    brp++;
            }
            if(brp>1)
                return false;
        }
    }
    return true;
}
int Resi1(int N, int* L, char** A, char* S) {
    q.push("");
    for(int i=1;i<=18;i++){
        string pom=q.front();
        while(pom.size()<i){
            q.pop();
            string pom1=pom+"a";
            //cout<<pom<<endl;
            if(moze(pom1,N,L,A)){
                copy(pom1.begin(), pom1.end(), S+1);
                return i;
            }
            if(moze1(pom1,N,L,A))
                q.push(pom1);
            string pom2=pom+"b";
            if(moze(pom2,N,L,A)){
                copy(pom2.begin(), pom2.end(), S+1);
                return i;
            }
            if(moze1(pom2,N,L,A))
                q.push(pom2);
            pom=q.front();
        }
    }
	return -1;
}
int Resi(int N, int K, int* L, char** A, char* S) {
    if(K==2)
        return Resi1(N,L,A,S);
    S[1] = 'a';
	return 1;
}