#include <bits/stdc++.h>
using namespace std;
int i, j, k, n, m, x, y, z, nn;
int id[60][60];
vector<int> a[3000], g, h;
void dfs(int x, int y, int ty) {
  if (!ty && x == g.size() || ty && x == h.size()) {
    if (!ty)
      dfs(1, i, 1);
    else {
      if (g.size() + h.size() > nn) return;
      printf("%d\n", g.size() + h.size());
      int i;
      for (i = h.size() - 1; i >= 0; i--) printf("%d ", h[i]);
      for (i = 0; i < g.size(); i++) printf("%d ", g[i]);
      printf("\n");
      exit(0);
    }
    return;
  }
  int i;
  int A = !ty ? g[x] : h[x], B = !ty ? id[y][A] : id[A][y];
  if (!B) return;
  if (!ty) {
    for (i = 0; i < a[B].size(); i++) {
      int C = a[B][i];
      g.push_back(C);
      if (g.size() > nn) return;
    }
  } else {
    for (i = a[B].size() - 1; i >= 0; i--) {
      int C = a[B][i];
      h.push_back(C);
      if (h.size() > nn) return;
    }
  }
  dfs(x + 1, A, ty);
}
int main() {
  scanf("%d%d", &n, &m);
  nn = n * 2;
  for (i = 1; i <= m; i++) {
    scanf("%d%d%d", &x, &y, &k);
    id[x][y] = i;
    for (j = 1; j <= k; j++) scanf("%d", &z), a[i].push_back(z);
  }
  for (i = 1; i <= n; i++)
    for (j = 1; j <= n; j++) {
      int A = id[i][j], wei;
      if (!A || a[A].size() < 2) continue;
      for (k = 0; k + 1 < a[A].size(); k++) {
        int B = a[A][k], C = a[A][k + 1], D = id[B][C];
        if (B == i && C == j) break;
      }
      if (k + 1 == a[A].size()) goto yy1;
      wei = k;
      g.clear();
      for (k = wei + 1; k < a[A].size(); k++) {
        int B = a[A][k];
        g.push_back(B);
        if (g.size() > nn) goto yy1;
      }
      h.clear();
      for (k = wei; k >= 0; k--) {
        int B = a[A][k];
        h.push_back(B);
        if (h.size() > nn) goto yy1;
      }
      dfs(1, j, 0);
    yy1:;
    }
  printf("0\n");
  return 0;
}
