#include <iostream> using namespace std; const int MAXN = 1000001; int father[MAXN]; int height[MAXN]; bool visit[MAXN]; void Initial (){ for (int i = 1; i < MAXN; i++){ father[i] = i; height[i] = 0; visit[i] = false; } } int Find (int x){ if (x != father[x]){ father[x] = Find(father[x]); } return father[x]; } void Union (int x, int y){ x = Find(x); y = Find(y); if (x != y){ if (height[x] > height[y]){ father[y] = x; }else if (height[y] > height[x]){ father[x] = y; }else{ father[x] = y; height[y]++; } } } int main () { int x, y; Initial(); while (scanf("%d%d", &x, &y) != EOF){ Union(x, y); visit[x] = true; visit[y] = true; } int ans = 0; for (int i = 1; i <= MAXN; i++){ if (father[i] == i && visit[i]){ ans++; } } cout << ans << endl; return 0; }