#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")