#include <bits/stdc++.h>
using namespace std;
void dfs(int node, int graph[], int &sz, bool vis[])
{
    if(vis[node])
        return;
    vis[node]=1;
    sz++;
    dfs(graph[node], graph, sz, vis);
}
int main()
{
    int n;
    cin>>n;
    map<string, int>str_to_int;
    int graph[n];
    int index=0;
    string aa, bb;
    for(int i=0; i<n; i++)
    {
        cin>>aa>>bb;
        if(str_to_int.find(aa)==str_to_int.end())
        {
            str_to_int[aa]=index;
            index++;
        }
        if(str_to_int.find(bb)==str_to_int.end())
        {
            str_to_int[bb]=index;
            index++;
        }
        graph[str_to_int[aa]]=str_to_int[bb];
    }
    if(n%2==1)
    {
        cout<<-1;
        return 0;
    }
    bool vis[n];
    memset(vis, 0, sizeof(vis));
    long long int sol=0;
    int sz=1;
    for(int i=0; i<n; i++)
    {
        if(!vis[i])
        {
            sz=0;
            dfs(i, graph, sz, vis);
            sol+=(sz/2);
            if(sz%2==1)
                sol++;
        }
    }
    cout<<sol;
    
    return 0;
}
| # | 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... |