#include <iostream>
using namespace std;
int set[10];
int find(int x)//找x的祖先
{
if(set[x]==x)
return x;
return set[x]=find(set[x]);//把x的各个祖先的双亲都置最久远的祖先
}
//递归的思路:每个元素都将自己的双亲置为双亲为参数得到的值(递归就是要保持当前问题与其子问题的处理方式相同)
void dispSet(int n)
{
for(int i=0; i<n; i++ )
cout<<set[i]<<' ';
cout<<endl;
}
int main()
{
int n=10,x,y,anx,any;
for(int i=0; i<n; i++)
set[i]=i;
dispSet(n);
while(cin>>x>>y) {
anx=find(x);
any=find(y);
set[anx]=any;//x,y祖先之间建立起关系,让祖先唯一
cout<<"x's ancestor is "<<find(x)<<endl;
cout<<"y's ancestor is "<<find(y)<<endl;
dispSet(n);
}
}