/*思路:遍历字符串match[i],与s逐个比较
分为两种:普通字符 和 通配字符(中括号内的)
而具体字符判断的过程:根据是否为大小写,各有不同判断条件
考虑单独构造一个字符比较函数compare
这样无论是否是在中括号里面,判断的过程均相同
*/
#include<iostream>
#include<string>
using namespace std;
string match[1000];
string s;
bool compare(char c1,char c2){//比较两个字符:只要不满足就结束
     if(c1>='a'&&c1<='z'){
                if(c1!=c2&&c1-32!=c2){
                    return false;
                }
            }
            else if(c1>='A'&&c1<='Z'){
                if(c1!=c2&c1+32!=c2){
                    return false;
                }
            }
            else{
                 if(c1!=c2){
                    return false;
                }
            }
    return true;//满足条件 返回true
}
bool judge(string k){//匹配函数
    int i=0,j=0;
    int flag=1;//字符串匹配标志
    while(i<k.size()&&j<s.size()){
        if(s[j]!='['){//普通字符
            if(!compare(s[j],k[i])){
                flag=0;
                break;
            }
        }
        else {//通配字符
            int flag2=0;//通配符匹配标志
            for(int p=j+1;s[p]!=']';p++){//遍历中括号里面的字符
               if(compare(s[p],k[i])){//只要满足就结束
                flag2=1;
                break;
                }
            }
            if(flag2==0){
                    flag=0;
                    break;
            }
        }
        
        i++;//每比较完一个字符,i、j同时右移
        if(s[j]=='['){       
            while(s[++j]!=']'); //比较通配字符后,j右移至']'位置
        }
        j++;
    }//while结束
    if(j==s.size()&&i==k.size())return flag;//检查长度
    else return false;
}
int main(){
    int n;
    while(scanf("%d",&n)!=EOF){
        for(int i=0;i<n;i++){
            cin>>match[i];
        }
        cin>>s;
         for(int i=0;i<n;i++){
            if(judge(match[i])){
                cout<<i+1<<" "<<match[i]<<endl;
            };
        }
    }
}