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
#include <bits/stdc++.h>
using namespace std;
#define FOR(i,p,k) for(int i=(p); i<=(k); ++i)
#define FORL(i,p,k) for(long long i=(p); i<=(k); ++i)
#define RFOR(i,p,k) for(int i=(p); i>=(k); --i)
#define REP(i,k) FOR(i,0,(k)-1)
#define FORC(i,c,in) for(i; c; in)
#define FORPWK(pw,k,cond) for(int pw = 1, k = 1; cond; pw *= 2, ++k)
#define all(x) (x).begin(), (x).end()
#define rall(x) (x).end(), (x).begin()
#define siz(x) int((x).size())
#define f first
#define s second
#define v vector
#define pb push_back
#define eb emplace_back
#define C const
typedef long long ll;
typedef v<int> vi;
typedef C int ci;
typedef C ll cll;
typedef pair<int, int> pii;
template<typename T>
using V = vector<T>;

inline void solve() {
    ios_base::sync_with_stdio(0);
    cin.tie(0);

    int k, n;
    cin >> k >> n;

    vi od(k + 1), ile(k + 1), oj(1, 0);

    od[1] = 1;
    ile[1] = n;
    FOR(i, 1, n){
		oj.pb(0);
		}

    FOR(i, 2, k){
        int n1;
        cin >> n1;
        od[i] = siz(oj);
        ile[i] = n1;
        FOR(j, 1, n1){
            int a;
            cin >> a;
            oj.pb(a ? od[i - 1] + a - 1 : 0);
			}
		}

    int m = siz(oj) - 1;
    V<ll> sum(m + 1), dp(m + 1);

    RFOR(i, m, 1){
        dp[i] = max(1LL, sum[i]);
        if(oj[i]){
			sum[oj[i]] += dp[i];
			}
		}

    ll wyn = 0;
    FOR(i, 1, k){
        ll cur = 0, l = od[i], p = l + ile[i] - 1;
        FOR(j, l, p){
			cur += dp[j];
			}
			wyn = max(wyn, cur);
		}

    cout << wyn << "\n";
}

signed main() {
    int tt = 1;
    while(tt--) solve();
}