#include <bits/stdc++.h>
using namespace std;
long long check(string s1, string s2) {
  if (s1.size() <= s2.size()) return 0;
  for (long long i = 0; i < s2.size(); i++) {
    if (s1[s1.size() - i - 1] != s2[s2.size() - i - 1]) return 0;
  }
  return 1;
}
int main() {
  long long n;
  cin >> n;
  map<string, set<string>> m;
  for (long long i = 0; i < n; i++) {
    string s;
    cin >> s;
    long long nunu;
    cin >> nunu;
    for (long long j = 0; j < nunu; j++) {
      string x;
      cin >> x;
      m[s].insert(x);
    }
  }
  for (auto it = m.begin(); it != m.end(); it++) {
    set<string> s = it->second;
    for (auto it1 = it->second.begin(); it1 != it->second.end(); it1++) {
      string s1 = *it1;
      if (s.count(s1) == 0) continue;
      for (auto it2 = it->second.begin(); it2 != it->second.end(); it2++) {
        if (s.count(*it2) == 0) continue;
        if (it1 != it2) {
          string s2 = *it2;
          long long result1 = check(s1, s2);
          if (result1) s.erase(s.find(*it2));
        }
      }
    }
    it->second = s;
  }
  cout << m.size() << endl;
  for (auto it = m.begin(); it != m.end(); it++) {
    cout << it->first << " " << (it->second).size() << " ";
    for (auto it1 = (it->second).begin(); it1 != (it->second).end(); it1++) {
      cout << *it1 << " ";
    }
    cout << endl;
  }
}
