用的是区间dp
#include<bits/stdc++.h>
using namespace std;
string jichu[10][20];
string duibi="aa";
string base;
int a,b,c,d,pd;
char str[]={'W','I','N','G'};
bool check[210][210][10];
void find(int l,int r){
for(int q=1;q<=a;q++){
if(duibi==jichu[1][q]) check[l][r][1]=1;
}
for(int q=1;q<=b;q++){
if(duibi==jichu[2][q]) check[l][r][2]=1;
}
for(int q=1;q<=c;q++){
if(duibi==jichu[3][q]) check[l][r][3]=1;
}
for(int q=1;q<=d;q++){
if(duibi==jichu[4][q]) check[l][r][4]=1;
}
}
int main(){
cin>>a>>b>>c>>d;
for(int i=1;i<=a;i++) cin>>jichu[1][i];
for(int i=1;i<=b;i++) cin>>jichu[2][i];
for(int i=1;i<=c;i++) cin>>jichu[3][i];
for(int i=1;i<=d;i++) cin>>jichu[4][i];
cin>>base;
int n=base.length();
for(int i=2;i<=n;i++){
for(int l=1;l<=n-i+1;l++){
int r=l+i-1;
for(int k=l;k<=r;k++){
if(l==k&&k+1==r) {
duibi[0]=base[l-1];
duibi[1]=base[r-1];
find(l,r);
}
else if(l==k){
duibi[0]=base[l-1];
for(int q=1;q<=4;q++){
if(check[k+1][r][q]) {
duibi[1]=str[q-1];
find(l,r);
}
}
}
else if(k+1==r){
duibi[1]=base[r-1];
for(int q=1;q<=4;q++){
if(check[l][k][q]) {
duibi[0]=str[q-1];
find(l,r);
}
}
}
else {
for(int q=1;q<=4;q++){
if(check[l][k][q]){
duibi[0]=str[q-1];
for(int qq=1;qq<=4;qq++){
if(check[k+1][r][qq]){
duibi[1]=str[qq-1];
find(l,r);
}
}
}
}
}
}
}
}
for(int i=1;i<=4;i++){
if(check[1][n][i]){
cout<<str[i-1];
pd=1;
}
}
if(!pd) cout<<"The name is wrong!";
}