#include <bits/stdc++.h>
using namespace std;
int n, m, i, x, y, k, a, q, h, l, r, j, p, s[400];
vector<int> ve[51][51];
bool ok1, ok2, Find, ok[51][51];
void get(int x, int y, int z) {
  q = 105;
  h = 104;
  for (int i = 1; i < ve[x][y].size(); i++) {
    s[++h] = ve[x][y][i];
    if (i == z) l = h, r = h + 1;
  }
  while (q != l && h - q + 1 <= 2 * n) {
    if (ve[s[l - 1]][s[l]].size() == 0) return;
    for (int i = ve[s[l - 1]][s[l]].size() - 1; i; i--)
      s[--q] = ve[s[l - 1]][s[l]][i];
    l--;
  }
  if (h - q + 1 > 2 * n) return;
  while (h != r && h - q + 1 <= 2 * n) {
    if (ve[s[r]][s[r + 1]].size() == 0) return;
    for (int i = 1; i < ve[s[r]][s[r + 1]].size(); i++)
      s[++h] = ve[s[r]][s[r + 1]][i];
    r++;
  }
  if (h - q + 1 > 2 * n) return;
  Find = true;
}
int main() {
  scanf("%d%d", &n, &m);
  for (i = 1; i <= m; i++) {
    scanf("%d%d%d", &x, &y, &k);
    ok1 = false;
    ok2 = false;
    ve[x][y].push_back(0);
    a = 0;
    while (k--) {
      if (a != x)
        ok1 = false;
      else
        ok1 = true;
      scanf("%d", &a);
      if (a == y && ok1) ok2 = true;
      ve[x][y].push_back(a);
    }
    if (ok2) ok[x][y] = true;
  }
  for (i = 1; i <= n; i++)
    for (j = 1; j <= n; j++)
      if (ok[i][j])
        for (p = 1; p < ve[i][j].size() - 1; p++)
          if (ve[i][j][p] == i && ve[i][j][p + 1] == j) {
            get(i, j, p);
            if (Find) {
              printf("%d\n", h - q + 1);
              for (i = q; i <= h; i++) printf("%d ", s[i]);
              printf("\n");
              return 0;
            }
          }
  printf("0\n");
}
