/*********************************
* 日期:2013-1-29
* 作者:SJF0115
* 题号: 九度1165
* 题目:字符串匹配
* 来源:http://ac.jobdu.com/problem.php?pid=1165
* 结果:AC
* 题意:
* 总结:1.如果匹配串中没有[],直接用strcmp比较
2.如果匹配串中有[],先匹配[]前后字符串,再匹配[]中字符串
**********************************/
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
char c[1001][1001],temp[1001][1001],c2[1001];//temp转换为小写后的数组
//匹配串中没有[]
void allMatch(int n){
for(int i = 0;i < n;i++){
if(strcmp(temp[i],c2) == 0){
printf("%d %s\n",i+1,c[i]);
}
}
}
//匹配串中有[]
int Match(int start,int end,int n,int index){
int i,j,k;
//[]前匹配
for(i = 0,k = 0;i < strlen(c[index]) && k < start;i++,k++){
if(temp[index][i] != c2[k]){
return 0;
}
}
//[]后匹配
for(j = i + 1,k = end + 1;j < strlen(c[index]) && k < strlen(c2);j++,k++){
if(temp[index][j] != c2[k]){
return 0;
}
}
if(j < strlen(c[index]) || k < strlen(c2)){
return 0;
}
//[]中匹配
for(j = start + 1;j < end;j++){
if(c2[j] == temp[index][i]){
return 1;
}
}
return 0;
}
int main()
{
int n,i,j,len;
//freopen("C:\\Users\\SJF\\Desktop\\acm.txt","r",stdin);
while(scanf("%d",&n)!=EOF)
{
//输入数据
for(i = 0;i < n;i++){
scanf("%s",c[i]);
len = strlen(c[i]);
//全部转换成小写便于匹配
for(j = 0;j < len;j++){
if(c[i][j] >= 'A' && c[i][j] <= 'Z'){
temp[i][j] = c[i][j] - 'A' + 'a';
}
else{
temp[i][j] = c[i][j];
}
}
}
//输入匹配串
scanf("%s",c2);
//全部转换成小写便于匹配,找[]下标
int start = -1,end = -1;
for(i = 0;i < strlen(c2);i++){
if(c2[i] == '['){
start = i;
}
else if(c2[i] == ']'){
end = i;
}
if(c2[i] >= 'A' && c2[i] <= 'Z'){
c2[i] = c2[i] - 'A' + 'a';
}
}
//start = -1:匹配串中没有[]
if(start == -1){
allMatch(n);
}
else{
for(i = 0;i < n;i++){
if(Match(start,end,n,i)){
printf("%d %s\n",i+1,c[i]);
}
}
}
}
return 0;
}