#include <bits/stdc++.h>
using namespace std;
set<int> S[201];
bool visited[201];
int parent[201];
int main() {
  int n;
  memset(parent, -1, sizeof(parent));
  scanf("%d", &n);
  n = n * (n - 1) / 2;
  if (n == 1) {
    int k, temp;
    scanf("%d", &k);
    scanf("%d", &temp);
    printf("1 %d\n", temp);
    printf("%d ", k - 1);
    for (int j = 1; j < k; j++) {
      scanf("%d", &temp);
      printf("%d ", temp);
    }
    return 0;
  }
  for (int i = 0; i < n; i++) {
    int k, temp;
    scanf("%d", &k);
    for (int j = 0; j < k; j++) {
      scanf("%d", &temp);
      S[temp].insert(i);
    }
  }
  for (int i = 1; i <= 200; i++) {
    for (int j = i + 1; j <= 200; j++) {
      if (!S[i].empty() && !S[j].empty() && (S[i].size() == S[j].size())) {
        set<int>::iterator it = S[i].begin(), jt = S[j].begin();
        for (; it != S[i].end(); it++, jt++) {
          if (*it != *jt) break;
        }
        if (it == S[i].end()) {
          parent[j] = i;
        }
      }
    }
  }
  for (int i = 1; i <= 200; i++)
    if (parent[i] != -1) {
      int root = i;
      while (parent[root] != -1) {
        root = parent[root];
      }
      parent[i] = root;
    }
  for (int i = 1; i <= 200; i++) {
    vector<int> v;
    for (int j = 1; j <= 200; j++) {
      if (parent[j] == i) v.push_back(j);
    }
    if (!S[i].empty() && parent[i] == -1) {
      printf("%d %d ", v.size() + 1, i);
      for (int j = 0; j < v.size(); j++) {
        printf("%d ", v[j]);
      }
      puts("");
    }
  }
  return 0;
}
