#include "september.h"
#include <bits/stdc++.h>
using namespace std;
int solve(int n, int m, vector<int> F, vector<vector<int> > S) {
int ans = 1;
vector<int> dp(n, -1);
vector<vector<int> > in(m, vector<int>(n));
for(int j = 0; j < m; j++) for(int i = 1; i < n; i++) in[j][F[i]]++;
dp[0] = 0;
for(int o = 0; o < n-1; o++) {
vector<int> ok(n, 1);
for(int l = 0; l < m; l++) {
if(dp[o] != -1) {
vector<int> vis(n);
auto tmp_in = in[l];
int now = 0;
for(int k = o; k < n-1; k++) {
int i = S[l][k];
vis[i] = 1;
if(tmp_in[i] > 0) now++;
tmp_in[F[i]]--;
if(vis[F[i]] && tmp_in[F[i]] == 0) now--;
if(now != 0) ok[k] = 0;
}
}
int j = S[l][o];
in[l][F[j]]--;
}
vector<set<int> > se(m);
for(int i = o; i < n-1; i++) {
for(int l = 0; l < m; l++) {
se[l].insert(S[l][i]);
}
for(int j = 0; j < m; j++) for(int k = j+1; k < m; k++)
ok[i] &= se[j] == se[k];
}
if(dp[o] != -1) {
for(int k = o; k < n-1; k++) if(ok[k]) {
dp[k+1] = max(dp[k+1], dp[o] + 1);
}
}
}
return dp[n-1];
}
/*
1
5 1
0 1 2 3
4 3 2 1
*/