#pragma GCC optimize("O3")
#include<bits/stdc++.h>
using namespace std;
#include"september.h"
using ll=long long;
#define rep(i,n) for(ll i=0;i<(n);++i)
#define repr(i,n) for(ll i=(n)-1;i>=0;--i)
#define repa(i,m,n) for(ll i=(m);i<(n);++i)
#define repra(i,m,n) for(ll i=(n)-1;i>=(m);--i)
#define all(a) a.begin(),a.end()
#define rall(a) a.rbegin(),a.rend()
constexpr ll INF=1LL<<60;
struct ll2{ll a,b;friend auto operator<=>(ll2,ll2)=default;};
struct ll3{ll a,b,c;friend auto operator<=>(ll3,ll3)=default;};
struct ll4{ll a,b,c,d;friend auto operator<=>(ll4,ll4)=default;};
template<typename T>
ostream& operator<<(ostream& os,vector<T> A){
os<<'(';
for(T a:A)os<<a<<' ';
os<<')';
return os;
}
int solve(int N, int M, std::vector<int> F, std::vector<std::vector<int>> S){
vector<vector<ll>> G(N);
repa(i,1,N)G[F[i]].push_back(i);
set<ll> T;
rep(i,N)T.insert(i);
for(auto A:S){
vector<ll> vis(N,0);
ll c=0;
A.push_back(0);
rep(i,N){
auto dfs=[&](auto&&dfs,ll x)->int{
if(vis[x])return 0;
++c;
vis[x]=1;
for(ll y:G[x])dfs(dfs,y);
return 0;
};
--c;
dfs(dfs,A[i]);
if(c)T.erase(i);
}
}
return T.size()-1;
}