#include <iostream> #include <algorithm> #include <cstdio> #include <cstdlib> using namespace std; const int N = 50007; int n, g1[N], g2[N], Pos[N], Num[N]; bool Visited[N]; bool Build(int x, int p) { Visited[x] = true; Pos[p] = x; if (p == n) return true; if ((!Visited[g1[x]] && Build(g1[x], p + 1)) || (!Visited[g2[x]] && Build(g2[x], p + 1))) return true; Visited[x] = false; return false; } int main() { int i, a, b, Max = 0; cin >> n; for (i = 1; i <= n; ++i) scanf("%d%d", &g1[i], &g2[i]); if (!Build(1, 1)) {cout << -1 << endl; return 0;} for (i = 1; i <= n; ++i) ++Num[(n + Pos[i] - i) % n]; for (i = 0; i < n; ++i) Max = max(Max, Num[i]); fill(Num, Num + n, 0); reverse(Pos + 1, Pos + n + 1); for (i = 1; i <= n; ++i) ++Num[(n + Pos[i] - i) % n]; for (i = 0; i < n; ++i) Max = max(Max, Num[i]); cout << n - Max << endl; return 0; } /************************************************************** Problem: 2258 User: admin Language: C++ Result: Accepted Time:154 ms Memory:4348 kb ****************************************************************/