#include using namespace std; typedef long long int ll; typedef unsigned long long ull; mt19937_64 rng(chrono::steady_clock::now().time_since_epoch().count()); ll myRand(ll B) { return (ull)rng() % B; } int main(){ cin.tie(nullptr); ios::sync_with_stdio(false); int n,m; cin >> n >> m; vector a(m),b(m); vector> g(n); for(int i=0;i> a[i] >> b[i]; a[i]--; b[i]--; g[a[i]].push_back(b[i]); } for(int i=0;i> dp(n,vector(2,false)); dp[i][0]=true; queue> q; q.push({i,0}); while(q.size()){ auto p=q.front(); q.pop(); for(int t:g[p.first]){ if(!dp[t][p.second^1]){ dp[t][p.second^1]=1; q.push({t,p.second^1}); } } } for(int j=0;j col(m,-1); // 赤の方が丁度1個多いサイクルと緑の方が丁度1個多いサイクルがあれば後はなんでもOKな気がしている // 前提より全体で強連結になってるはずなので(多分) // 2つのサイクル同士で辺を共有する場合もありそうで難しい(サンプル1) if(n==m){ printf("-1\n"); return 0; } // return 1; // for(int i=0;i