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
89
90
91
92
93
94
95
96
97
98
99
#include<bits/stdc++.h>
 
#define pb push_back
#define ppb pop_back
#define eb emplace_back
#define fi first
#define se second
#define turbo ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);
#define mid ((l+r)/2)
#define midLL ((l+r)/2LL)
#define mide ((lo+hi)/2)
#define mideLL ((lo+hi)/2LL)
#define endl '\n'
#define random_shuffle shandom_ruffle
#define lowbit(x) x&(-x)
#define bits(x) __builtin_popcount(x) 
#define mins(se) (*se.begin())
#define maxs(se) (*--se.end())
#define all(x) x.begin(), x.end()
#define log2_floor(i) (i ? __builtin_clzll(1) - __builtin_clzll(i) : -1)
#define siz(cont) ((int)cont.size())
#define each(it, cont) for(auto &it : cont)
#define ein(cont) for(auto &it : cont) cin >> it;
#define mp(a, b) make_pair(a, b)

using ll = long long;
using pii = std::pair<int, int>;
using pll = std::pair<ll, ll>;
using pli = std::pair<ll, int>;
using pil = std::pair<int, ll>;
using vll = std::vector<pll>;
using vii = std::vector<pii>;
using vi = std::vector<int>;
using vl = std::vector<ll>;
using vvl = std::vector<vl>;
using vvi = std::vector<vi>;
using vvii = std::vector<vii>;
using vli = std::vector<pli>;
using vvli = std::vector<vli>;
using vil = std::vector<pil>;
using vvil = std::vector<vil>;
using vc = std::vector<char>;
using vvc = std::vector<std::vector<char>>;
using vb = std::vector<bool>;
using vvb = std::vector<vb>;

#ifdef JDKURWE
void err() { std::cout << "\n"; fflush(stdout); }
template<class T, class... Ts>
void err(T arg, Ts &... args) {
    std::cout << arg << ' ';
    err(args...);
}
#else 
void err() {}
template<class T, class... Ts>
void err(T arg, Ts &... args) {
    err(args...);
}
#endif

using namespace std;

signed main() { 
    turbo;
    int k, n1; cin >> k >> n1;
    vvi v(k);
    vvi dp(k);
    v[0].resize(n1, 0);
    dp[0].resize(n1, 0);

    for (int i = 1; i < k; i++) {
        int m; cin >> m;
        v[i].resize(m);
        dp[i].resize(m, 0);
        for (int j = 0; j < m; j++)
            cin >> v[i][j];
    }

    int fr = 0;
    for (int i = k-1; i >= 0; i--) {
        for (int j = 0; j<siz(dp[i]); j++)
            if (!dp[i][j]) {
                dp[i][j] = 1;
                if (fr)
                    fr--;
            }
        for (int j = 0; j<siz(dp[i]); j++)
            if (dp[i][j]) {
                if (v[i][j]) {
                    dp[i-1][v[i][j]-1] += dp[i][j];
                }
                else {
                    fr += dp[i][j];
                }
            }
    }
    cout << fr;
}