#include<bits/stdc++.h>
using namespace std;
struct node{
bool vis;
int Val,lc,rc,d;
}tree[110];
int q;
int get_d(int step/*深度*/,int k/*节点*/)
{
int maxn=0;
tree[k].d=step; //记录深度
if(tree[k].lc) maxn=max(get_d(step+1,tree[k].lc),maxn); //遍历左子树
if(tree[k].rc) maxn=max(get_d(step+1,tree[k].rc),maxn); //遍历右子树
if(!tree[k].lc&&!tree[k].rc) return step; //如果没有子树
return maxn;
}
int E[110];
void get_e(int step/*深度*/,int k/*节点*/)
{
E[step]++; //宽度加一
if(tree[k].lc) get_e(step+1,tree[k].lc);
if(tree[k].rc) get_e(step+1,tree[k].rc);
}
int rush(int p)
{
get_e(1,1);
sort(E,E+p);
return E[p-1];
}
int get_way(int step,int k,int v/*目标节点*/) //这里求debug
{
tree[k].vis=1; //标记
if(k==v) return step-1;
if(tree[k].lc&&!tree[k].vis) get_way(step+1,tree[k].lc,v);
if(tree[k].rc&&!tree[k].vis) get_way(step+1,tree[k].rc,v);
if(!tree[k].lc&&!tree[k].rc) return 0; //如果没有子树
}
int main(){
int n;
cin>>n;
for(int i=0;i<n-1;i++)
{
int u,v;
cin>>u>>v;
if(tree[u].lc==0) tree[u].lc=v,tree[u].Val=i+1; //构建树
else tree[u].rc=v,tree[u].Val=i+1;
}
int x,y;
cin>>x>>y; //获取要抓取的节点
int k=get_d(1,1);
cout<<k<<endl<<rush(k)<<endl<<get_way(1,1,x)*2-get_way(1,1,y);
return 0;
}
球球了!!!