#include <bits/stdc++.h>
using namespace std;
int64_t arr[5000005], freq[5000005];
int64_t t, n, m, k, x, y, a, b, z, p, q, r, sum = 0;
vector<string> vec[100005], v;
set<int64_t> st;
string s, s2;
int check(string s1, string s2) {
  int l1 = s1.length(), l2 = s2.length();
  if (l1 > l2) return 0;
  int p1 = l1 - 1, p2 = l2 - 1;
  while (p1 >= 0) {
    if (s1[p1] != s2[p2]) return 0;
    p1--;
    p2--;
  }
  return 1;
}
int main() {
  cin >> n;
  int64_t i = 1;
  map<string, int> make_pair;
  while (n--) {
    cin >> s >> x;
    string second;
    if (make_pair.find(s) == make_pair.end()) {
      make_pair[s] = i;
      for (int j = 0; j < x; j++) {
        cin >> second;
        vec[i].push_back(second);
      }
      i++;
    } else {
      int64_t ind = make_pair[s];
      for (int j = 0; j < x; j++) {
        cin >> second;
        vec[ind].push_back(second);
      }
    }
  }
  cout << make_pair.size() << endl;
  map<string, int>::iterator it;
  for (it = make_pair.begin(); it != make_pair.end(); it++) {
    int64_t x = it->second;
    cout << it->first << " ";
    int64_t c = 0;
    set<string> ans;
    for (int i = 0; i < vec[x].size(); i++) {
      int yes = 1;
      for (int j = 0; j < vec[x].size(); j++) {
        if (i == j) continue;
        string s1 = vec[x][i];
        string s2 = vec[x][j];
        if (s1 == s2) continue;
        if (check(s1, s2) == 1) {
          yes = 0;
          break;
        }
      }
      if (yes == 1) ans.insert(vec[x][i]);
    }
    cout << ans.size() << " ";
    set<string>::iterator it2;
    for (it2 = ans.begin(); it2 != ans.end(); it2++) {
      cout << *it2 << " ";
    }
    cout << endl;
  }
  return 0;
}
