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
100
101
#include <bits/stdc++.h>
#define BTS 1000
using namespace std;

vector<int> sc[200005], cgt[200005];
int sm[200005];

int odw[200005], sow = 1, cm, stw;
bool ibc[200005];
bitset<BTS> km[BTS + 10];
bool dfs(int w, int s = 0)
{
    if (odw[w] == sow)
        return 0;
    ibc[w] = 1;
    odw[w] = sow;

    bool p = 1, aaa = 0;
    for (auto i : sc[w])
    {
        if (i == w || i > cm || ibc[i])
        {
            km[w].set();
            km[w].flip();
            if (ibc[i])
            {
                km[w][i] = 1;
                odw[w] = 0;
                aaa = 1;
            }
            break;
        }
        // if (stw == 11 && cm == 20)
        //     cout << "W " << w << ' ' << i << '\n';
        bool z = dfs(i);
        if (z)
        {
            odw[w] = 0;
            aaa = 1;
        }
        km[w] &= km[i];
        if (p)
        {
            km[w] = km[i];
            p = 0;
        }
    }
    // if (stw == 11 && cm == 20)
    // {
    //     cout << sow << ' ' << w << ' ' << stw << ' ';
    //     // if (sow == 209)
    //     for (int i = 1; i <= cm; i++)
    //         cout << km[w][i];
    //     // if (sow == 209)
    //     cout << '\n';
    // }
    km[w][w] = 1;
    ibc[w] = 0;
    return aaa;
}

int main()
{
    ios_base::sync_with_stdio(0);
    int n;
    cin >> n;
    for (int i = 1; i <= n; i++)
    {
        int q;
        cin >> q;
        while (q--)
        {
            int a;
            cin >> a;
            // if (a < i)
            sc[i].push_back(a);
            // if (a > i)
            // cout << i << ' ' << a << '\n';
            // cgt[a].push_back(i);
        }
        sort(sc[i].begin(), sc[i].end());
    }
    bitset<BTS> odw[n + 2];
    long long sp = 0;
    for (int i = 1; i <= n; i++)
    {
        sp = 0;
        cm = i;
        sow++;
        for (int j = 1; j <= i; j++)
        {
            // cout<<i<<' '<<j<<endl;
            stw = j;
            dfs(j, 1);
            sp += km[j].count() - km[j][j];
            // cout << km[j].count() - km[j][j] << ' ';
            // cout << km[j].count() << ' ' << km[j][j] << '\n';
        }
        cout << sp << ' ';
    }
}