Language: C++

#include<iostream>
#include<cstdio>
#include<queue>
#include<stack>
#include<vector>
#include<cstring>
#include<string>
#include<set>
#include<map>
#include<cmath>
#include<algorithm>

using namespace std;

const int inf=100000000,maxn=16,maxm=1<<16;

char str[2][maxm][300];
int len[2][maxm];
#define MAXN 300
#define _match(a,b) ((a)==(b))
typedef char elem_t;

	int pat_match(int ls,elem_t* str,int lp,elem_t* pat){ //str陦ィ遉コ讓。蠑丈クイ?継at陦ィ遉コ隕∝惠讓。蠑丈クイ荳ュ謇セ
	int fail[MAXN]={-1},i=0,j;               //蛻ー逧?ュ蝉クイ?瑚ソ泌屓蛹ケ驟榊芦荳イ逧?ャャ荳?クェ蟄玲ッ咲噪
	for (j=1;j<lp;j++){						//菴咲スョ?御サ?蠑?ァ区?蜿キ
		for (i=fail[j-1];i>=0&&!_match(pat[i+1],pat[j]);i=fail[i]);
		fail[j]=(_match(pat[i+1],pat[j])?i+1:-1);
	}
	for (i=j=0;i<ls&&j<lp;i++)
		if (_match(str[i],pat[j]))
			j++;
		else if (j)
			j=fail[j-1]+1,i--;
	return j==lp?(i-lp):-1;
}


//騾夂畑逧?ク?クェkmp邂玲ウ包シ茎tr蟄伜源驟堺クイ?継at蟄俶ィ。蠑丈クイ
//髴?ヲ∽シ??荳?クェ蜥茎tr螟ァ蟆冗嶌蜷檎噪next?檎畑譚・隶ー蠖貧ext謨ー扈?//霑泌屓蛟シ譏ッ蛹ケ驟咲噪谺。謨ー?罫es荳ュ蟄伜お豈丈クェ蛹ケ驟咲噪蛻晏ァ倶ス咲スョ縲?int kmp(char* str,char* pat,int* next,int* res)
{
	int i=0,j=-1,len1,len2,cnt=0;
	next[0]=-1;
	while(str[i]){
		if(j==-1||str[i]==str[j]) next[++i]=++j;
		else j=next[j];
	} len1=strlen(pat);
    len2=strlen(str);
	i=j=0;
    while(i<len1){
        while(j!=len2&&pat[i]==str[j]) i++,j++;
        if(!j) i++;
        else if(j==len2){
            res[cnt++]=i-j;
            j=next[j];
        } else j=next[j];
    } return cnt;
}
int next[maxm],res[maxm];
int bin[maxn],ll[maxn];
char ch[maxn][22];
int main()
{
	//freopen("in.txt","r",stdin);
	bool f;
	int i,j,k,l,n,now,pre,ans;
	bin[0]=1;
	for(i=1;i<maxn;i++)
	{
	    bin[i]=bin[i-1]*2;
	}
	while(scanf("%d",&n)==1)
	{
	    if(n==0)break;
	    now=1;
	    pre=0;
	    scanf("%s",str[now][0]);
	    len[now][0]=strlen(str[now][0]);
	    n--;
	    for(i=0;i<n;i++)
	    {
	        scanf("%s",ch[i]);
	        ll[i]=strlen(ch[i]);
	    }
	    for(i=0;i<n;i++)
	    {
	        swap(now,pre);
	        for(j=0;j<bin[i+1];j++)
	        {
	            len[now][j]=inf;
	        }
	        for(j=0;j<bin[i];j++)
	        {
                if(pat_match(len[pre][j],str[pre][j],ll[i],ch[i])!=-1)
                {
                    len[now][j*2]=len[pre][j];
                    strcpy(str[now][j*2],str[pre][j]);
                    len[now][j*2+1]=len[pre][j];
                    strcpy(str[now][j*2+1],str[pre][j]);
                }
                else
                {
                    for(k=0;k<=ll[i];k++)
                    {
                        for(l=0,f=true;l+k<ll[i]&&l<len[pre][j];l++)
                        {
                            if(str[pre][j][l]!=ch[i][k+l])
                            {
                                f=false;
                                break;
                            }
                        }
                        if(f)
                        {
                            len[now][j*2]=len[pre][j]+k;
                            strcpy(str[now][j*2],ch[i]);
                            strcpy(str[now][j*2]+k,str[pre][j]);
                            break;
                        }
                    }
                    for(k=ll[i]-1;k>=-1;k--)
                    {
                        for(l=0,f=true;len[pre][j]-l-1>=0&&k-l>=0;l++)
                        {
                            if(ch[i][k-l]!=str[pre][j][len[pre][j]-l-1])
                            {
                                f=false;
                                break;
                            }
                        }
                        if(f)
                        {
                            len[now][j*2+1]=len[pre][j]+ll[i]-k-1;
                            strcpy(str[now][j*2+1],str[pre][j]);
                            strcpy(str[now][j*2+1]+len[pre][j]-k-1,ch[i]);
                            break;
                        }
                    }
                }
	        }
	    }
	    ans=inf;
	    for(i=0;i<bin[n];i++)
	    {
	        if(ans>len[now][i])ans=len[now][i];
	    }
	    printf("%d\n",ans);
	}
}

Compiler output:
a.cc:40:1: error: expected unqualified-id before '{' token
   40 | {
      | ^