#include <bits/stdc++.h>
using namespace std;
#define MAXN 100001
#define int long long
int n;
set<pair<string,string>> edges;
vector<pair<string,string>> for_delete;
vector<pair<string,string>> newedges;
vector<string> vec;
int32_t main()
{
cin>>n;for (int i=1;i<=n;i++) {string s1,s2;cin>>s1>>s2;edges.insert({s1,s2});}
if (n%2==1) {cout<<-1<<endl;return 0;}
for (pair<string,string> edge:edges)
{
string ime1=edge.first,ime2=edge.second;
if (edges.find({ime2,ime1})!=edges.end() and ime1!=ime2) for_delete.push_back({ime1,ime2});
}
for (pair<string,string> edge:for_delete) edges.erase({edge.first,edge.second});
if (n<=20)
{
for (pair<string,string> edge:edges) newedges.push_back({edge.first,edge.second});
n=(int)newedges.size();int answer=n+1;
for (int maska=0;maska<(1<<n);maska++)
{
for (int bit=0;bit<n;bit++)
{
if (maska&(1<<bit)) {vec.push_back(newedges[bit].first);vec.push_back(newedges[bit].second);}
}
sort(vec.begin(),vec.end());bool valid=true;
for (int i=1;i<(int)vec.size();i++)
{
if (vec[i-1]==vec[i]) {valid=false;break;}
}
if (valid) answer=min(answer,n-(int)__builtin_popcount(maska));
vec.clear();
}
cout<<answer<<endl;return 0;
}
return 0;
}