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
#include <cassert>  
#include<iostream>
#include <vector>

using namespace std;

vector<vector<int>> polaczenia;
vector<int> stany;
vector<int> rozmiary;

void print_v2(vector<vector<int>> & plotno) {
    for (auto s: plotno) {
		for (auto v:s)
			cout << v << " ";
		cout << "\n";
	}
}

void jazda(int plat) {
	if (rozmiary[plat] > 0) {
		stany[plat]= (stany[plat]+1) % rozmiary[plat];
		jazda(polaczenia[plat][stany[plat]]);
	}
}

bool test_stany(int platform) {
	for (int i=0; i<platform; i++)
		if (stany[i] != 0)
			return(false);
	return(true);
}

int main() {

    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);

    int platform, l_polaczen, el, wynik; 
	cin >> platform;
	for (int i=0; i<platform; i++){
		polaczenia.push_back({});
		cin >> l_polaczen;
		stany.push_back(0);
		rozmiary.push_back(l_polaczen);
		for(int pp=0; pp < l_polaczen; pp++) {
			cin>>el;
			polaczenia[i].push_back(el-1);
		}
	}
	wynik = 0;
	while (true) {
		wynik+= 1;
		jazda(0);
		if (test_stany(platform))
			break;
	}
	cout << wynik << "\n";
}