#include<bits/stdc++.h>
using namespace std;
int n,K,go[22][22][22];
string s[22],ans;
string dp[66666][20][7]; 
void upd(string &a,string &b,char c)
{
	string s=b+c;
	if (a=="") a=s;
	else if (a>s) a=s;
}
int fuck(int x,int y,int z)
{
	string a,b,c,d;
	a=b=c=d="";
	a=s[x];
	reverse(a.begin(),a.end());
	bool u[22];
	memset(u,0,sizeof(u));
	for (int i=0;i<a.size();i++)
	{
		u[a[i]-'A']=1;
	}
	for (int i=0;i<n;i++) 
	{
		if (!u[i]) b+=(char)('A'+i);
	}
	if (n-K==1) a=a+b;
	else if (n-K==2)
	{
		if (y==1) a=a+b;
		else a=a+b[1]+b[0];
	}
	else 
	{
		if (y==1) a=a+b;
		else if (y==2) a=a+b[0]+b[2]+b[1];
		else if (y==3) a=a+b[1]+b[0]+b[2];
		else if (y==4) a=a+b[1]+b[2]+b[0];
		else if (y==5) a=a+b[2]+b[0]+b[1];
		else a=a+b[2]+b[1]+b[0];
	}
	c=s[z];int pos=0;
	for (int i=0;i<c.size();i++)
	{
		while(pos<a.size() && a[pos]!=c[i]) 
		{
			d=d+a[pos];
			pos++;
		}
		if (pos>=a.size()) return -1;
		pos++;
	}
	while(pos<a.size()) 
	{
		d=d+a[pos];
		pos++;
	}
	if (n-K==1) return 1;
	if (n-K==2)
	{
		if (d[0]>d[1]) return 2;
		return 1;
	}
	if (d[0]<d[1] && d[1]<d[2]) return 1;
	if (d[0]<d[2] && d[2]<d[1]) return 2;
	if (d[1]<d[0] && d[0]<d[2]) return 3;
	if (d[2]<d[0] && d[0]<d[1]) return 4;
	if (d[1]<d[2] && d[2]<d[0]) return 5;
	return 6; 
}
int main()
{
	scanf("%d%d",&n,&K);
	for (int i=0;i<n;i++)
	{
		cin>>s[i];
	}
	for (int i=0;i<n;i++)
	{
		if (n-K==1) dp[1<<i][i][1]+=(char)('A'+i);
		else if (n-K==2) 
		{
			dp[1<<i][i][1]+=(char)('A'+i);
			dp[1<<i][i][2]+=(char)('A'+i);
		}
		else
		{
			dp[1<<i][i][1]+=(char)('A'+i);
			dp[1<<i][i][2]+=(char)('A'+i);
			dp[1<<i][i][3]+=(char)('A'+i);
			dp[1<<i][i][4]+=(char)('A'+i);
			dp[1<<i][i][5]+=(char)('A'+i);
			dp[1<<i][i][6]+=(char)('A'+i);
		}
	}
	for (int j=0;j<n;j++)
	{
		for (int k=1;k<=6;k++)
		{
			if (n-K==1 && k>1) continue;
			if (n-K==2 && k>2) continue;
			for (int h=0;h<n;h++)
			{
				go[j][k][h]=fuck(j,k,h);
			}
		}
	}
	for (int i=1;i<(1<<n);i++)
	{
		for (int j=0;j<n;j++)
		{
			if (!(i&(1<<j))) continue;
			for (int k=1;k<=6;k++)
			{
				if (dp[i][j][k]=="") continue;
				for (int h=0;h<n;h++)
				{
					if (i&(1<<h)) continue;
					int hs=go[j][k][h];
					if (!~hs) continue;
					upd(dp[i^(1<<h)][h][hs],dp[i][j][k],'A'+h);
				}
			}
		}
	}
	ans="";
	for (int i=0;i<n;i++)
	{
		for (int k=1;k<=6;k++)
		{
			if (dp[(1<<n)-1][i][k]=="") continue;
			if (ans=="") ans=dp[(1<<n)-1][i][k];
			else if (ans>dp[(1<<n)-1][i][k]) ans=dp[(1<<n)-1][i][k];
		}
	}
	cout<<ans<<endl;
	return 0;
}
