#include <iostream>
#include "map"
#define N 65535;
using namespace std;
map<int, int> son_TO_Father;
//连通问题直接想到并查集
//找爸爸
int FindFather(int u) {
if (u == son_TO_Father[u]) {
return u;
} else {
son_TO_Father[u] = FindFather(son_TO_Father[u]);
return son_TO_Father[u];
}
}
//合并两个集合
void UnionSet(int u, int v) {
int u_root = FindFather(u);
int v_root = FindFather(v);
if (u_root != v_root) {
son_TO_Father[v_root] = u_root;
}
}
//判断连通子图的个数
int CountGraph() {
int count = 0;
for (auto it : son_TO_Father) {
if (it.first == it.second) {
++count;
}
}
return count;
}
int main() {
int a, b;
while (cin >> a >> b && a && b) {//注意while处理多个case
//初始化并查集
if (son_TO_Father.find(a) == son_TO_Father.end()) {
son_TO_Father[a] = a;
}
if (son_TO_Father.find(b) == son_TO_Father.end()) {
son_TO_Father[b] = b;
}
UnionSet(a, b);
}
printf("%d\n", CountGraph());
return 0;
}