#include <iostream>
#include <set>
#include <string>
#include <vector>
using namespace std;
int main() {
int n,m;
while (cin >> n) { // 注意 while 处理多个 case
vector<string> vecI(n,"");
set<int> setR;
string tmpStr;
int tmp;
vector<int> legal;
vector<vector<int>> indexR;
for(int i=0;i<n;i++){
cin >>tmpStr;
vecI[i]=tmpStr;
// cout << tmpStr <<' ';
}
// cout <<endl;
cin >>m;
for(int i=0;i<m;i++){
cin >> tmp;
setR.insert(tmp);
}
// for(auto t:setR) cout << t <<' ';
for(auto r:setR){
string R=to_string(r);
// cout << R <<endl;
vector<int> tmpVec;
int flag=0;//默认没有元素
for(int i=0;i<n;i++){
if(vecI[i].find(R) != string::npos){
tmpVec.push_back(i);
// cout << i << ' ' ;
flag=1;
}
}
// cout <<endl;
if(flag){
legal.push_back(r);
indexR.push_back(tmpVec);
}
}
int cnt=0;
for(auto t:indexR){
cnt+=t.size()*2;
// cout << t.size() <<' ';
}
cnt += indexR.size()*2;
cout << cnt <<' ';
int index=0;
for(auto t:indexR){
cout << legal[index] << ' ' << t.size() << ' ';
for(auto i:t){
cout << i << ' ' << vecI[i] << ' ';
}
index++;
}
}
}
// 64 位输出请用 printf("%lld")