#include <bits/stdc++.h>
const int MAX_LEN = 1010;
using namespace std;
template <typename U, typename V>
string to_string(pair<U, V>);
string to_string(const string& e_) { return "\"" + e_ + "\""; }
string to_string(char e_) { return "\'" + string(1, e_) + "\'"; }
string to_string(bool e_) { return e_ ? "true" : "false"; }
template <typename T>
string to_string(T e_) {
  string s_ = "[ ";
  for (const auto& x_ : e_) s_ += to_string(x_) + " ";
  return s_ + "]";
}
template <typename U, typename V>
string to_string(pair<U, V> e_) {
  return "(" + to_string(e_.first) + ", " + to_string(e_.second) + ")";
}
void dbg_str() { ; }
template <typename U, typename... V>
void dbg_str(U u, V... v) {
  ;
  dbg_str(v...);
}
int n, m, x;
map<int, vector<int> > a;
map<vector<int>, vector<int> > b;
int main() {
  scanf("%d", &n);
  if (n == 2) {
    vector<int> l;
    scanf("%d %d", &m, &x);
    printf("1 %d\n", x);
    printf("%d ", --m);
    while (m--) {
      scanf("%d", &x);
      printf("%d ", x);
    }
    exit(0);
  }
  for (int i = 0; i < (n * (n - 1)) / 2; i++) {
    scanf("%d", &m);
    while (m--) {
      scanf("%d", &x);
      a[x].push_back(i);
    }
  };
  for (auto& it : a) {
    b[it.second].push_back(it.first);
  }
  for (auto& it : b) {
    printf("%d ", (int)it.second.size());
    for (int i = 0; i < (int)it.second.size(); i++) printf("%d ", it.second[i]);
    printf("\n");
  }
}
