#include <bits/stdc++.h>
using namespace std;

vector<string> v;

string solve(string cur)
{
    //cout<<cur<<"\n";
    bool gcan=true,perm=true;
    for(int i=0;i<v.size() && !cur.empty();i++)
    {
        bool can=false;
        //printf("%d\n",cur.size()-v[i].size());
        for(int j=0;cur.size()>=v[i].size() && j<=cur.size()-v[i].size();j++)
        {
            bool tmpcan=true;
            for(int k=0;k<v[i].size();k++)
            {
                //printf("%d %d %d\n",cur.size(),j,k);
                if(v[i][k]!=cur[j+k])
                {
                    tmpcan=false;
                    break;
                }
            }
            if(tmpcan && can)
            {
                perm=false;
            }
            if(tmpcan)
            {
                can=true;
                break;
            }
        }
        if(!can)
        {
            gcan=false;
            break;
        }
    }
    if(gcan && perm && !cur.empty())
    {
        return cur;
    }
    if(cur.size()==18)
    {
        return "!";
    }
    string tmp1=solve(cur+'a'),tmp2=solve(cur+'b');
    if(tmp1[0]=='!')
    {
        return tmp2;
    }
    if(tmp2[0]=='!')
    {
        return tmp1;
    }
    if(tmp1.size()<tmp2.size())
    {
        return tmp1;
    }
    return tmp2;
}

int Resi(int N, int K, int* L, char** A, char* S)
{
    for(int i=1;i<=N;i++)
    {
        string tmps="";
        for(int j=1;j<=L[i];j++)
        {
            tmps+=A[i][j];
        }
        v.push_back(tmps);
    }
    string res=solve("");
    if(res[0]=='!')
    {
        return -1;
    }
    for(int i=0;i<res.size();i++)
    {
        S[i+1]=res[i];
    }
    return res.size();
}