/**
*    Author :  Vu Khac Minh
*    Created : 08.03.2024
**/
#pragma GCC optimize("O3,unroll-loops") // O2
#pragma GCC target("avx2,bmi,bmi2,lzcnt,popcnt")
#include <bits/stdc++.h>
#define MASK(x) ((1ll) << (x))
#define BIT(x, i) (((x) >> (i)) & (1))
#define c_bit(i) __builtin_popcountll(i) 
#define SET_ON(x, i) ((x) | MASK(i)) 
#define SET_OFF(x, i) ((x) & ~MASK(i)) 
#define ALL(v) (v).begin(), (v).end()
#define REP(i, n) for (int i = 0, _n = (n); i < _n; ++i)
#define FOR(i, a, b) for (int i = (a), _b = (b); i <= _b; ++i)
#define FORD(i, b, a) for (int i = (b), _a = (a); i >= _a; --i)
#define db(val) "["#val" = " << (val) << "] "
#define ll long long
using namespace std;
const int maxn = 2e5 + 5;
const int mod = 1e9+7;
void file()
{
    #define Task "ROUNDPRI"
    if(fopen(Task".inp","r"))
    {
        freopen(Task".inp","r",stdin);
        freopen(Task".out","w",stdout);
    }
}
vector<pair<int,int>> dp[maxn];
int n,nquery,m,f[maxn],vis[maxn],b[maxn];
vector<int> adj[maxn];
void solve()
{
        cin>>n>>m>>nquery;
        FOR(i,1,m)
        {
            int u,v;
            cin>>u>>v;
            adj[v].push_back(u);
        }
        FOR(i,1,n)
        {
            vector<pair<int,int>> save;
            save.push_back({0,i});
            for(auto u : adj[i])
                for(auto v : dp[u])
                {
                    save.push_back({v.first+1,v.second});
                }
            sort(ALL(save),greater<pair<int,int>>());
            for(auto x : save)
            if(vis[x.second] == 0 && dp[i].size() <100) 
            {
                    dp[i].push_back({x.first,x.second});
                    vis[x.second] = 1;
            }
            for(auto x: save) vis[x.second] = 0;
        }
    while(nquery--)
    {
        int pos,k,x,res=-1;
        cin>>pos>>k;
            FOR(i,1,k)
            {
                cin>>b[i];
                vis[b[i]] = 1;
            }
        if(dp[pos].size() < 100)
        {
                for(auto u : dp[pos])
                    if(!vis[u.second]) res  =max(res,u.first);
        }else
        {
            FORD(i,pos,1) f[i] = -1;
            f[pos] = 0;
            FORD(i,pos,1)
            {
                if(f[i]!=-1)
                {
                    if(!vis[i]) res = max(res,f[i]);
                    for(auto u : adj[i])
                        f[u] = max(f[u],f[i] +1);
                }
            }
        }
        FOR(i,1,k) vis[b[i]] = 0;
        cout<<res<<'\n';
    }
}
int main()
{
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    int ntest = 1;
    file();
    //cin >> ntest;
    while (ntest--)
    {
        solve();
    }
    return 0;
}
컴파일 시 표준 에러 (stderr) 메시지
bitaro.cpp: In function 'void file()':
bitaro.cpp:27:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   27 |         freopen(Task".inp","r",stdin);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~
bitaro.cpp:28:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   28 |         freopen(Task".out","w",stdout);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... |