#include <iostream>
#include <iomanip>
#include <cmath>
#include <algorithm>
#include <bits/stdc++.h>
#include <set>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
#include <map>
#define ll long long
using namespace __gnu_pbds;
using namespace std;
template <class T>
using ordered_set = tree<T , null_type , less<T> , rb_tree_tag , tree_order_statistics_node_update>;
// less<T>/greater<T> = ascending/descending.
// less_equal<>/greater_equal<> for ordered multiset
// ordered_multiset note : s.find(), s.erase() don't work + s.upper_bound() and s.lower_bound() swap jobs;
void fastIO(void) {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
}
int main(){
fastIO();
ll n; cin>>n;
bool match;
string temp;
ll temp2;
map<string,set<string>> names;
for (int i = 0; i<n; i++){
cin>>temp>>temp2;
for (int j = 0; j<temp2; j++) {
string temp3; cin>>temp3;
names[temp].insert(temp3);
}
}
for (auto i = names.begin(); i!=names.end(); i++) {
for (auto it2 = i->second.begin(); it2!=i->second.end();){
bool flag = 0;
for (auto it3 = next(it2,1); it3!=i->second.end();) {
bool flag2 = 0;
bool match = 0;
string str = *it2;
string str2 = *it3;
ll j = str.size()-1;
ll k = str2.size()-1;
while (j>=0 && k>=0) {
if (str[j]==str2[k]) {
if (j==0) {
flag = 1;
it2++;
i->second.erase(prev(it2,1));
match = 1;
break;
}
else if (k==0) {
flag2 = 1;
it3++;
i->second.erase(prev(it3,1));
match = 1;
break;
}
j--; k--;
}
else {
break;
}
}
if (!flag2) {
it3++;
}
}
if (!flag) {
it2++;
}
}
}
cout<<names.size()<<'\n';
for (auto i = names.begin(); i!=names.end(); i++) {
cout<<i->first<<' '<<i->second.size()<<' ';
for (auto it2 = i->second.begin(); it2!=i->second.end(); it2++){
cout<<*it2<<' ';
}
cout<<'\n';
}
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8aW9tYW5pcD4KI2luY2x1ZGUgPGNtYXRoPgojaW5jbHVkZSA8YWxnb3JpdGhtPgojaW5jbHVkZSA8Yml0cy9zdGRjKysuaD4KI2luY2x1ZGUgPHNldD4KI2luY2x1ZGUgPGV4dC9wYl9kcy9hc3NvY19jb250YWluZXIuaHBwPgojaW5jbHVkZSA8ZXh0L3BiX2RzL3RyZWVfcG9saWN5LmhwcD4KI2luY2x1ZGUgPG1hcD4KI2RlZmluZSBsbCBsb25nIGxvbmcKdXNpbmcgbmFtZXNwYWNlIF9fZ251X3BiZHM7CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CnRlbXBsYXRlIDxjbGFzcyBUPgp1c2luZyBvcmRlcmVkX3NldCA9IHRyZWU8VCAsIG51bGxfdHlwZSAsIGxlc3M8VD4gLCByYl90cmVlX3RhZyAsIHRyZWVfb3JkZXJfc3RhdGlzdGljc19ub2RlX3VwZGF0ZT47Ci8vIGxlc3M8VD4vZ3JlYXRlcjxUPiA9IGFzY2VuZGluZy9kZXNjZW5kaW5nLgovLyBsZXNzX2VxdWFsPD4vZ3JlYXRlcl9lcXVhbDw+IGZvciBvcmRlcmVkIG11bHRpc2V0Ci8vIG9yZGVyZWRfbXVsdGlzZXQgbm90ZSA6IHMuZmluZCgpLCBzLmVyYXNlKCkgZG9uJ3Qgd29yayArIHMudXBwZXJfYm91bmQoKSBhbmQgcy5sb3dlcl9ib3VuZCgpIHN3YXAgam9iczsKdm9pZCBmYXN0SU8odm9pZCkgewogICAgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7CiAgICBjaW4udGllKE5VTEwpOwogICAgY291dC50aWUoTlVMTCk7Cn0KaW50IG1haW4oKXsKICAgIGZhc3RJTygpOwogICAgbGwgbjsgY2luPj5uOwogICAgYm9vbCBtYXRjaDsKICAgIHN0cmluZyB0ZW1wOwogICAgbGwgdGVtcDI7CiAgICBtYXA8c3RyaW5nLHNldDxzdHJpbmc+PiBuYW1lczsKICAgIGZvciAoaW50IGkgPSAwOyBpPG47IGkrKyl7CiAgICAgICAgY2luPj50ZW1wPj50ZW1wMjsKICAgICAgICBmb3IgKGludCBqID0gMDsgajx0ZW1wMjsgaisrKSB7CiAgICAgICAgICAgIHN0cmluZyB0ZW1wMzsgY2luPj50ZW1wMzsKICAgICAgICAgICAgbmFtZXNbdGVtcF0uaW5zZXJ0KHRlbXAzKTsKICAgICAgICB9CiAgICB9CiAgICBmb3IgKGF1dG8gaSA9IG5hbWVzLmJlZ2luKCk7IGkhPW5hbWVzLmVuZCgpOyBpKyspIHsKICAgICAgICBmb3IgKGF1dG8gaXQyID0gaS0+c2Vjb25kLmJlZ2luKCk7IGl0MiE9aS0+c2Vjb25kLmVuZCgpOyl7CiAgICAgICAgICAgIGJvb2wgZmxhZyA9IDA7CiAgICAgICAgICAgIGZvciAoYXV0byBpdDMgPSBuZXh0KGl0MiwxKTsgaXQzIT1pLT5zZWNvbmQuZW5kKCk7KSB7CiAgICAgICAgICAgICAgICBib29sIGZsYWcyID0gMDsKICAgICAgICAgICAgICAgIGJvb2wgbWF0Y2ggPSAwOwogICAgICAgICAgICAgICAgc3RyaW5nIHN0ciA9ICppdDI7CiAgICAgICAgICAgICAgICBzdHJpbmcgc3RyMiA9ICppdDM7CiAgICAgICAgICAgICAgICBsbCBqID0gc3RyLnNpemUoKS0xOwogICAgICAgICAgICAgICAgbGwgayA9IHN0cjIuc2l6ZSgpLTE7CiAgICAgICAgICAgICAgICB3aGlsZSAoaj49MCAmJiBrPj0wKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKHN0cltqXT09c3RyMltrXSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoaj09MCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZyA9IDE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdDIrKzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGktPnNlY29uZC5lcmFzZShwcmV2KGl0MiwxKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaCA9IDE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChrPT0wKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFnMiA9IDE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdDMrKzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGktPnNlY29uZC5lcmFzZShwcmV2KGl0MywxKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaCA9IDE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBqLS07IGstLTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmICghZmxhZzIpIHsKICAgICAgICAgICAgICAgICAgICBpdDMrKzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoIWZsYWcpIHsKICAgICAgICAgICAgICAgIGl0MisrOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgY291dDw8bmFtZXMuc2l6ZSgpPDwnXG4nOwogICAgZm9yIChhdXRvIGkgPSBuYW1lcy5iZWdpbigpOyBpIT1uYW1lcy5lbmQoKTsgaSsrKSB7CiAgICAgICAgY291dDw8aS0+Zmlyc3Q8PCcgJzw8aS0+c2Vjb25kLnNpemUoKTw8JyAnOwogICAgICAgIGZvciAoYXV0byBpdDIgPSBpLT5zZWNvbmQuYmVnaW4oKTsgaXQyIT1pLT5zZWNvbmQuZW5kKCk7IGl0MisrKXsKICAgICAgICAgICAgY291dDw8Kml0Mjw8JyAnOwogICAgICAgIH0KICAgICAgICBjb3V0PDwnXG4nOwogICAgfQp9Cg==