#include <iostream>
#include <cstring>
#include <vector>
#include <unordered_set>
#include<map>
using namespace std;
map<int,int> s;
int find(int x){
    while(s[x]>0){
        x=s[x];
    }
    return x;
}
void union1(int r1,int r2){
    s[r1]=r2;
}
int main() {
    int a, b;
    while (cin >> a >> b) { // 注意 while 处理多个 case

        int r1=find(a),r2=find(b);
        if(r1!=r2) union1(r1,r2);
    }
    int res=0;unordered_set<int> ans;
    for(auto it:s){
        ans.insert(find(it.first));
    }
cout<<ans.size();
}
// 64 位输出请用 printf("%lld")