代码如下:
#include<bits/stdc++.h>
#define N 205
using namespace std;
int num[4],dp[N][N][4],n;
vector<int> t[4][4];
char str[N],o[]={'W','I','N','G'};
int f(char c){
if(c=='W') return 0;
if(c=='I') return 1;
if(c=='N') return 2;
if(c=='G') return 3;
}
int main(){
for(int i=0;i<4;i++) scanf("%d",&num[i]);
for(int i=0;i<4;i++){
while(num[i]--){
char c[2];scanf("%s",c);
t[f(c[0])][f(c[1])].push_back(i);
}
}
scanf("%s",str);n=strlen(str);for(int i=n;i>=1;i--) str[i]=str[i-1];
for(int i=1;i<=n;i++) dp[i][i][f(str[i])]=1;
for(int len=1;len<n;len++){
for(int i=1;i<=n-len;i++){
int j=i+len;
for(int k=i;k<j;k++){
for(int l1=0;l1<4;l1++){
for(int l2=0;l2<4;l2++){
if(dp[i][k][l1]&&dp[k+1][j][l2]){
for(int l=0;l<t[l1][l2].size();l++) dp[i][j][t[l1][l2][l]]=1;
}
}
}
}
}
}
bool flag=1;
for(int i=0;i<4;i++){
if(dp[1][n][i]) putchar(o[i]),flag=0;
}
if(flag) printf("The name is wrong!");
return 0;
}