#include using namespace std; int n,k; double 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 right(mat.size(), 0); for(int i = 0; i r){ vector v(k, 0); v[i] = 1; mat.push_back(v); right.push_back(0); } } vector trash(k, 0); int s = solveLinear(mat, 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; }