///////////////////////////////////////////////////////////////////////////////////////////////////// //这儿的题怎么都这么错综复杂 //////////////////////////////////////////////////////////////////////////////////////////////////// #include <iostream> #include <cstdio> #include <string> // #include <algorithm> using namespace std; int main() { int n; while(scanf("%d",&n)) { string pattern[n]; string text; for(int i=0; i<n; ++i) { cin>>pattern[i]; } cin>>text; string str; int j=0; int q=0; int m;//[下标 int n;//]下标 while(j<text.size()) { if(text[j]=='[') { m=j; j++; while(text[j]!=']') //出来的时候,j就是】的下标 { str[q]==text[j]; ++q;//q是方括号里面的数量 ++j; } n=j; break; } ++j; } for(int i=0; i<n; ++i) { int k = 0; int p = 0; for(int y=0; y<str.size(); ++y) { if(pattern[i][m]!=str[y]) { break; } } while(k<pattern[i].size()) { if(k<m||k>m) { if(pattern[i][k]==text[p]) { ++k; ++p; } else { break; } } else if(k==m) { p=n+1; ++k; } } if(p==text.size()){ cout<<i+1<<' '<<pattern[i]<<endl; } } } }