#include #pragma GCC optimize ("Ofast") #pragma GCC target("avx2") using namespace std; int n,k; float eps = 1e-9; int solveLinear(vector>& A, vector& b, vector&x){ int n= A.size(); int m = x.size(); int rank = 0; int br, bc; if(n) assert(A[0].size() == m); vector col(m); iota(col.begin(), col.end(), 0); for(int i=0; ibv) br=r, bc=c, bv=v; if(bv<=eps){ for(int j=i; j eps) return -1; break; } swap(A[i], A[br]); swap(b[i], b[br]); swap(col[i], col[bc]); for(int j=0; j>& mat, int l, int r){ vector> nmat(n, vector(r-l+1)); for(int i = 0; i < n; i++){ for(int j = l; j<=r; j++){ nmat[i][j-l] = mat[i][j]; } } vector right(mat.size(), 0); vector trash(r-l+1, 0); int s = solveLinear(nmat, right, trash); bool res = s < trash.size(); return res; } int main(){ cin>>n>>k; // [vertex][type] vector> mat(n, vector(k, 0)); for(int i=0; i>n; for(int j=0; j>u>>v; u--;v--; mat[u][i]--; mat[v][i]++; } } int INF = 100000000; int res = INF; int r = 0; for(int l = 0; l=k) goto end; } res = min(res, r-l+1); } end : cout << (res == INF?-1 : res) << endl; }