#include <bits/stdc++.h>
using namespace std;
int nz[20],n,md,l[20],st[20][150],cnt;
char res[20];
bool rsn[20];
void rek(int d)
{
    if(cnt==n && md>d)
    {
        md=d;
        for(int i=0;i<d;i++) res[i]='a'+nz[i];
        return;
    }
    nz[d]=0;
    if(d==18) return;
    bool pr=false;
    stack<int> stk;
    for(int i=0;i<n;i++)
    {
        bool pr2=false;
        if(d<l[i]) pr2=true;
        for(int j=0;j<l[i] && !pr2;j++) if(st[i][j]!=nz[d-j]) {pr2=true; break;}
        if(!pr2)
        {
            if(rsn[i]) {pr=true; break;}
            rsn[i]=true;
            cnt++;
            stk.push(i);
        }
    }
    if(!pr) rek(d+1);
    while(!stk.empty()) {rsn[stk.top()]=false; cnt--; stk.pop();}
    nz[d]=1;
    pr=false;
    for(int i=0;i<n;i++)
    {
        bool pr2=false;
        if(d<l[i]) pr2=true;
        for(int j=0;j<l[i] && !pr2;j++) if(st[i][j]!=nz[d-j]) {pr2=true; break;}
        if(!pr2)
        {
            if(rsn[i]) {pr=true; break;}
            rsn[i]=true;
            cnt++;
            stk.push(i);
        }
    }
    if(!pr) rek(d+1);
    while(!stk.empty()) {rsn[stk.top()]=false; cnt--; stk.pop();}
}
int Resi(int N, int K, int* L, char** A, char* S)
{
    n=N; md=100;
    for(int i=0;i<n;i++) l[i]=L[i+1];
    for(int i=0;i<n;i++) for(int j=0;j<l[i];j++) st[i][l[i]-1-j]=A[i+1][j+1]-'a';
    rek(0);
    if(md==100) md=-1;
    for(int i=0;i<md;i++) S[i+1]=res[i];
    return md;
}