#include #include using namespace std; using namespace atcoder; #define rep(i, n) for (int i = 0; i < (int)(n); i++) #define all(x) (x).begin(),(x).end() const long long MOD = 1000000007; const long long INF = 9999999999999999; using ll = long long; using mint = modint1000000007; templatebool chmax(T &a, const T &b) { if (abool chmin(T &a, const T &b) { if (b> G(200200); vector dist(200200); void dfs(int v){ for(auto e:G[v]){ if(dist[e] == 0){ dist[e] = 1; dfs(e); } } } int main(){ ll N; cin>>N; vector aru; ll H[200200] = {}; ll W[200200] = {}; ll H2[200200] = {}; ll W2[200200] = {}; rep(i,N){ ll a,b; cin>>a>>b; if(a == b){ H2[a]++; W2[b]++; aru.push_back(a); continue; } G[a].push_back(b); G[b].push_back(a); H[a]++; W[b]++; } bool special = 0; rep(i,200200){ if(H2[i] == N && W2[i] == N){ special = 1; } } if(special){ cout << 1 << endl; return 0; } ll youso = 0; ll saisyo = 0; rep(i,200200){ if(H[i]>0 || W[i]>0){ saisyo = i; youso++; } } dist[saisyo] = 1; dfs(saisyo); ll kyori = 0; rep(i,200200){ kyori += dist[i]; } if(kyori != youso){ cout << 0 << endl; return 0; } ll d = 0; rep(i,aru.size()){ if(H[aru[i]] == 0 && W[aru[i]] == 0){ d = 1; } } ll Hh = 0; ll Wh = 0; rep(i,200200){ if(abs(H[i]-W[i]) > 1){ d = 1; } else if(H[i]-W[i] == 1){ Hh++; } else if(W[i]-H[i] == 1){ Wh++; } else{ continue; } } if(d){ cout << 0 << endl; return 0; } if(Hh == 0 && Wh == 0){ ll ans = 0; rep(i,200200){ if(H[i]>0){ ans++; } } cout << ans << endl; } else if(Hh == 1 && Wh == 1){ cout << 1 << endl; } else{ cout << 0 << endl; } return 0; }