#include <bits/stdc++.h>
#define ll long long
using namespace std;
vector <vector <int>> g, rg;
vector <bool> ciklus, vis;
vector <vector <ll>> dp;
void dfs (int st)
{
ll sum=0, mini=LLONG_MAX;
for (auto i: rg[st])
{
if (!ciklus[i])
{
dfs(i);
sum+=dp[i][1];
mini=min(mini, dp[i][0]-dp[i][1]);
}
}
dp[st][0]=sum;
dp[st][1]=1+min(sum, sum+mini);
}
int cikr (int st, int n)
{
int ciksz=1;
vis[st]=true;
vector <vector <ll>> dp0(n, vector <ll> (2));
vector <vector <ll>> dp1(n, vector <ll> (2));
dp0[st][0]=dp[st][0]; dp1[st][1]=dp[st][1];
dp0[st][1]=INT_MAX; dp1[st][0]=INT_MAX;
int trn=g[st].back(), preth=st;
while (trn!=st)
{
ciksz++;
vis[trn]=true;
dp0[trn][0]=dp0[preth][1]+dp[trn][0];
dp1[trn][0]=dp1[preth][1]+dp[trn][0];
dp0[trn][1]=min(dp0[preth][0], dp0[preth][1])+dp[trn][1];
dp1[trn][1]=min(dp1[preth][0], dp1[preth][1])+dp[trn][1];
preth=trn;
trn=g[trn].back();
}
if (ciksz==2) return 0;
else return min({dp0[preth][1], dp1[preth][1], dp1[preth][0]});
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
int n; cin>>n;
map <string, int> nomenklatura;
g.resize(n); rg.resize(n);
int cntr=0;
for (int i=0; i<n; i++)
{
string s1, s2;
cin>>s1>>s2;
if (nomenklatura[s1]==0)
{
cntr++;
nomenklatura[s1]=cntr;
}
if (nomenklatura[s2]==0)
{
cntr++;
nomenklatura[s2]=cntr;
}
g[nomenklatura[s1]-1].push_back(nomenklatura[s2]-1);
rg[nomenklatura[s2]-1].push_back(nomenklatura[s1]-1);
}
if (n%2!=0) cout<<-1<<endl;
else
{
queue <int> kuku;
vector <int> cnt(n);
for (int i=0; i<n; i++)
{
cnt[i]=rg[i].size();
if (rg[i].size()==0)
{
kuku.push(i);
}
}
ciklus.assign(n, true);
while (!kuku.empty())
{
int top=kuku.front();
ciklus[top]=false;
kuku.pop();
for (auto i: g[top])
{
cnt[i]--;
if (cnt[i]==0)
{
kuku.push(i);
}
}
}
dp.resize(n, vector <ll> (2));
for (int i=0; i<n; i++)
{
if (ciklus[i])
{
dfs(i);
}
}
vis.assign(n, false);
int ans=0;
for (int i=0; i<n; i++)
{
if (ciklus[i] && !vis[i])
{
ans+=cikr(i, n);
}
}
cout<<ans<<endl;
}
return 0;
}