#pragma GCC optimize("O3")
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define ld long double
#define pb push_back
#define ff first
#define ss second
#define MOD 1000000007
#define INF 1000000019
#define POT (1<<20)
#define INFL 1000000000000000099LL
ll n;
string a,b;
map<string,ll>mp;
ll akk=1;
ll g[100007];
ll dg[100007];
bool uz[100007];
int main(){
ios_base::sync_with_stdio(0);cin.tie(0);
cin>>n;
ll il=0;
if(n%2){
cout<<-1;return 0;
}
for(ll i=0;i<n;i++){
cin>>a>>b;
if(mp[a]==0)mp[a]=akk++;
if(mp[b]==0)mp[b]=akk++;
g[mp[a]]=mp[b];
if(g[mp[b]]==mp[a] && a!=b){
il+=2;
uz[mp[b]]=1;
uz[mp[a]]=1;
}
dg[mp[b]]++;
}
queue<ll>q;
for(ll i=1;i<akk;i++){
if(dg[i]==0)q.push(i);
}
while(q.size()){
ll ak=q.front();
if(uz[ak])continue;
// cout<<ak<<" "<<il<<" ";
uz[ak]=1;
q.pop();
if(uz[g[ak]]){
continue;
}
else{
il++;
uz[g[ak]]=1;
dg[g[g[ak]]]--;
if(dg[g[g[ak]]]==0)q.push(g[g[ak]]);
}
}
// cout<<il<<" ";
for(ll i=1;i<akk;i++){
if(!uz[i]){
ll cnt=1;
ll x=g[i];
uz[i]=1;
while(x!=i){
cnt++;
uz[x]=1;
x=g[x];
}
il+=cnt/2;
}
}
cout<<n-il;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |