#include<iostream>
#include<algorithm>
#include<sstream>
#include<vector>
#include<set>
using namespace std;
vector<string> spliteToString(string str,char c)
{
    vector<string> res;
    string temp;
    istringstream is(str);
    while(getline(is, temp,c)) res.push_back(temp.c_str());
    return res;
}
vector<long> spliteLong(string str,char c)
{
    vector<long> res;
    string temp;
    istringstream is(str);
    while(getline(is, temp,c)) res.push_back(strtol(temp.c_str(),NULL,10));
    return res;
}
void lookInfo(string num,const vector<string>& Iv,vector<long>& lookV)
{
    vector<long> temp;
    for(int i=1;i<Iv.size();i++)
    {
        if(Iv[i].find(num)!=-1)
        {
            temp.push_back(i-1);
            temp.push_back(strtol(Iv[i].c_str(),NULL,10));
        }
    }
    if(temp.size()>0)
    {
        lookV.push_back(strtol(num.c_str(),NULL,10));
        lookV.push_back(temp.size()/2);
        for(int i=0;i<temp.size();i++)
            lookV.push_back(temp[i]);
    }
}
int main(int argc,char* argv[])
{
    string iStr="",rStr="";
    getline(cin, iStr);
    getline(cin, rStr);
    vector<string> Iv=spliteToString(iStr,' ');
    vector<long> Rv=spliteLong(rStr,' ');
    set<long> rSet;
    for(int i=1;i<Rv.size();i++)
        rSet.insert(Rv[i]);
    set<long>::iterator iter=rSet.begin();
    vector<long> resV;
    for(;iter!=rSet.end();iter++)
    {
        ostringstream stream;
        stream<<*iter;
        lookInfo(stream.str(),Iv,resV);
        stream.str("");
    }
    cout<<resV.size();
    for(int i=0;i<resV.size();i++) cout<<" "<<resV[i];
    cout<<endl;
    return 0;
}