#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;
}
#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;
}