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