#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
****************************************************************/