#pragma GCC optimize(3,"Ofast","inline")
#include <bits/stdc++.h>
using namespace std;
bool k[100000],a[4001][4001];
inline void read(int &x)
{
int f;
char c;
for (f=1,c=getchar(); c<'0'||c>'9'; c=getchar()) if(c=='-') f=-1;
for (x=0; c<='9'&&c>='0'; c=getchar()) x=x*10+(c&15);
x*=f;
}
int ans=0,n,n2,match[4001][2];
int dfs(int x)
{
for(int o=1; o<=n; o++)
{
if(a[x][o] && !k[o])
{
k[o]=1;
if(match[o][0]==0 || dfs(match[o][0]))
{
match[o][0]=x;
return 1;
}
if(match[o][1]==0 || dfs(match[o][1]))
{
match[o][1]=x;
return 1;
}
//return 0;
}
}
return 0;
}
int main()
{
int x,u;
read(n);
n2=n*2;
for(int i=1; i<=n2; i++)
{
read(x);
a[i][x]=1;
read(x);
a[i][x]=1;
}
for(int i=1; i<=n2; i++)
{
if(dfs(i))
{
ans++;
}
memset(k,0,sizeof(k));
}
//for(int i=1; i<=m; i++) cout<<match[i]<<endl;
cout<<ans;
return 0;
}