#include <bits/stdc++.h>
using namespace std;
bool dec(const string &a,const string &b)
{
if(a.length()!=b.length())
return a.length()>b.length();
return a>b;
}
int main() {
int n,count=0;
unordered_map<string,vector<string> >hash;
cin>>n;
while(n--)
{
string str;
cin>>str;
int a;
cin>>a;
if(hash.find(str)==hash.end())
count++;
while(a--)
{
string ns;
cin>>ns;
hash[str].push_back(ns);
}
}
cout<<count<<endl;
unordered_map<string,vector<string> >::iterator it;
for(it=hash.begin();it!=hash.end();it++)
{
cout<<it->first;
vector<string>v;
for(int i=0;i<(it->second).size();i++)
{
string temp=(it->second)[i];
v.push_back(temp);
}
sort(v.begin(),v.end(),dec);
bool vis[v.size()];
memset(vis,false,sizeof(vis));
for(int i=0;i<v.size();i++)
{
if(!vis[i])
{
for(int j=i+1;j<v.size();j++)
{
if(v[j]==v[i].substr(v[i].length()-v[j].length(),v[j].length()))
vis[j]=true;
}
cout<<" "<<v[i];
}
}
cout<<endl;
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CmJvb2wgZGVjKGNvbnN0IHN0cmluZyAmYSxjb25zdCBzdHJpbmcgJmIpCnsKCWlmKGEubGVuZ3RoKCkhPWIubGVuZ3RoKCkpCglyZXR1cm4gYS5sZW5ndGgoKT5iLmxlbmd0aCgpOwoJcmV0dXJuIGE+YjsKfQppbnQgbWFpbigpIHsKCWludCBuLGNvdW50PTA7Cgl1bm9yZGVyZWRfbWFwPHN0cmluZyx2ZWN0b3I8c3RyaW5nPiA+aGFzaDsKCWNpbj4+bjsKCXdoaWxlKG4tLSkKCXsKCQlzdHJpbmcgc3RyOwoJCWNpbj4+c3RyOwoJCWludCBhOwoJCWNpbj4+YTsKCQlpZihoYXNoLmZpbmQoc3RyKT09aGFzaC5lbmQoKSkKCQljb3VudCsrOwoJCXdoaWxlKGEtLSkKCQl7CgkJCXN0cmluZyBuczsKCQkJY2luPj5uczsKCQkJaGFzaFtzdHJdLnB1c2hfYmFjayhucyk7CgkJfQoJfQoJY291dDw8Y291bnQ8PGVuZGw7Cgl1bm9yZGVyZWRfbWFwPHN0cmluZyx2ZWN0b3I8c3RyaW5nPiA+OjppdGVyYXRvciBpdDsKCWZvcihpdD1oYXNoLmJlZ2luKCk7aXQhPWhhc2guZW5kKCk7aXQrKykKCXsKCQljb3V0PDxpdC0+Zmlyc3Q7CgkJdmVjdG9yPHN0cmluZz52OwoJCWZvcihpbnQgaT0wO2k8KGl0LT5zZWNvbmQpLnNpemUoKTtpKyspCgkJewoJCQlzdHJpbmcgdGVtcD0oaXQtPnNlY29uZClbaV07CgkJCXYucHVzaF9iYWNrKHRlbXApOwoJCX0KCQlzb3J0KHYuYmVnaW4oKSx2LmVuZCgpLGRlYyk7CgkJYm9vbCB2aXNbdi5zaXplKCldOwoJCW1lbXNldCh2aXMsZmFsc2Usc2l6ZW9mKHZpcykpOwoJCWZvcihpbnQgaT0wO2k8di5zaXplKCk7aSsrKQoJCXsKCQkJaWYoIXZpc1tpXSkKCQkJewoJCQkJZm9yKGludCBqPWkrMTtqPHYuc2l6ZSgpO2orKykKCQkJCXsKCQkJCQlpZih2W2pdPT12W2ldLnN1YnN0cih2W2ldLmxlbmd0aCgpLXZbal0ubGVuZ3RoKCksdltqXS5sZW5ndGgoKSkpCgkJCQkJdmlzW2pdPXRydWU7CgkJCQl9CgkJCQljb3V0PDwiICI8PHZbaV07CgkJCX0KCQl9CgkJY291dDw8ZW5kbDsKCX0KCQoJCglyZXR1cm4gMDsKfQ==
prog.cpp: In function ‘int main()’:
prog.cpp:39:29: error: no matching function for call to ‘sort(std::vector<std::__cxx11::basic_string<char> >::iterator, std::vector<std::__cxx11::basic_string<char> >::iterator, <unresolved overloaded function type>)’
sort(v.begin(),v.end(),dec);
^
In file included from /usr/include/c++/6/algorithm:62:0,
from /usr/include/x86_64-linux-gnu/c++/6/bits/stdc++.h:65,
from prog.cpp:1:
/usr/include/c++/6/bits/stl_algo.h:4697:5: note: candidate: template<class _RAIter> void std::sort(_RAIter, _RAIter)
sort(_RandomAccessIterator __first, _RandomAccessIterator __last)
^~~~
/usr/include/c++/6/bits/stl_algo.h:4697:5: note: template argument deduction/substitution failed:
prog.cpp:39:29: note: candidate expects 2 arguments, 3 provided
sort(v.begin(),v.end(),dec);
^
In file included from /usr/include/c++/6/algorithm:62:0,
from /usr/include/x86_64-linux-gnu/c++/6/bits/stdc++.h:65,
from prog.cpp:1:
/usr/include/c++/6/bits/stl_algo.h:4727:5: note: candidate: template<class _RAIter, class _Compare> void std::sort(_RAIter, _RAIter, _Compare)
sort(_RandomAccessIterator __first, _RandomAccessIterator __last,
^~~~
/usr/include/c++/6/bits/stl_algo.h:4727:5: note: template argument deduction/substitution failed:
prog.cpp:39:29: note: couldn't deduce template parameter ‘_Compare’
sort(v.begin(),v.end(),dec);
^