1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
#include <iostream>
#include <queue>
#include <vector>
using namespace std;

const int MAXN = 100 + 7;

queue<int> G[MAXN];

int main()
{
	ios_base::sync_with_stdio(0);
	cin.tie(0);
	int n;
	cin >> n;

	for (int i = 1; i <= n; i++) {
		int ile;
		cin >> ile;
		int a;
		while (ile--) {
			cin >> a;
			G[i].push(a);
		}
	}


	if (G[1].size() == 0) {
		cout << 1 << endl;
	}
	else {
		long long int wynik = 0;
		vector<int> pierwszaTrasa;
		bool con = true;
		int indDowziecia = 1;
		pierwszaTrasa.push_back(1);
		while (con) {			
			int nastEl = G[indDowziecia].front();
			G[indDowziecia].pop();
			G[indDowziecia].push(nastEl);

			pierwszaTrasa.push_back(nastEl);
			indDowziecia = nastEl;
			if (G[nastEl].empty() == true) {
				con = false;
				break;
			}
		}
		wynik += 1;

		bool repeat = true;
		while (repeat) {
			vector<int> ciag;
			int inddowziecia = 1;
			ciag.push_back(inddowziecia);
			bool cont = true;
			while (cont) {
				int nastEl = G[inddowziecia].front();
				G[inddowziecia].pop();
				G[inddowziecia].push(nastEl);

				ciag.push_back(nastEl);
				inddowziecia = nastEl;
				if (G[nastEl].empty() == true) {
					cont = false;
				}
			}

			if (pierwszaTrasa.size() == ciag.size()) {
				bool sprawdz = true;
				for (int i = 0; i < ciag.size(); i++) {
					if (ciag[i] != pierwszaTrasa[i]) {
						sprawdz = false;
					}
				}

				if (sprawdz == true) {
					repeat = false;
				}
			}
			wynik += (long long int)1;
		}

		cout <<(long long int) wynik - 1 << '\n';
	}

	return 0;
}