#include "september.h"
#include<bits/stdc++.h>
#define ll long long
#define ld long double
#define vl vector<ll>
#define vi vector<int>
#define pb push_back
#define sz(v) (ll)(v.size())
#define all(v) v.begin(), v.end()
#define rall(v) v.rbegin(), v.rend()
#define f first
#define s second
#define pii pair<int, int>
#define pll pair<ll, ll>
using namespace std;
const int sz = 1e5+5;
vi g[sz];
int vis[sz], deg[sz];
int solve(int N, int M, std::vector<int> F, std::vector<std::vector<int>> S) {
for(int i = 0; i < N; i++)
{
deg[i]++;
deg[F[i]]++;
if(F[i] != -1){
g[i].pb(F[i]);
g[F[i]].pb(i);
}
}
vector<pii>vect[M+5];
for(int i = 0; i < M; i++)
{
int cnt = 0, lst = 0;
set<int>st;
for(int j = 0; j < N - 1; j++)
{
if(deg[S[i][j]] == 1)
{
queue<int>q;
q.push(S[i][j]);
while(sz(q))
{
int nd = q.front();
if(st.find(nd) != st.end())
st.erase(nd);
q.pop();
for(auto u : g[nd])
{
deg[u]--;
if(deg[u] == 1 && st.find(u) != st.end())
q.push(u);
}
}
}
else
{
st.insert(S[i][j]);
}
if(!sz(st)){
vect[i].pb({lst+1, j+1});
lst = j + 1;
cnt++;
}
}
for(int j = 0; j < N; j++)
deg[j] = 0;
for(int j = 0; j < N; j++)
{
deg[j]++;
deg[F[j]]++;
}
}
map<int, int>mp;
for(int i = 0; i < M; i++)
{
for(auto u : vect[i])
mp[u.s]++;
}
int res = 0;
for(auto u : mp)
{
if(u.s == M)
res++;
}
return res;
for(int i = 0; i < N; i++)
{
g[i].clear();
vis[i] = 0;
deg[i] = 0;
}
return res;
}