#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 );   }   