#include<iostream>
#include<string>
#include<cstring>
#include<algorithm>
using namespace std;
using ll = long long;
const int N = 140;
struct node
{
int ls, rs;
}a[N]{ 0 };
int d[N]; int ai;
int lenc[5];
bool vis[N];
void dfs(int x, int dep) {
if (x == 0)return;
d[dep]++;
dfs(a[x].ls, dep + 1);
dfs(a[x].rs, dep + 1);
}
void dfsr1(int x ,int aim) {
if (x == 0 || x == aim)return;
vis[x] = 1;
dfsr1(a[x].ls, aim);
dfsr1(a[x].rs, aim);
}
void dfsr2(int x, int aim) {
if (x == 0)return;
if (vis[x]) {
ai = x; return;
}
dfs(a[x].ls, aim);
dfs(a[x].rs, aim);
}
void fdfs(int x, int aim , int len, int uu) {
if (x == 0)return;
if (x == aim) {
lenc[uu] = len;
}
fdfs(a[x].ls, aim,len + 1, uu);
fdfs(a[x].rs, aim,len + 1, uu);
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr); cout.tie(nullptr);
memset(d, 0, sizeof(d));
int n; cin >> n;
for (int i = 1; i <= n - 1; i++) {
int ro, t;
cin >> ro;
if (a[ro].ls)cin >> a[ro].rs;
else cin >> a[ro].ls;
}
dfs(1, 1);
int xxx, yyy; cin >> xxx >> yyy;
dfsr1(1, xxx); dfsr2(1, yyy);
fdfs(ai, xxx, 0, 1); fdfs(ai, yyy, 0, 2);
int ans = 0;
for (int i = 1; i <= 100; i++) {
ans = max(ans, d[i]);
if (d[i] == 0) {
cout << i - 1 << endl << ans << endl;
break;
}
}
cout << lenc[1] * 2 + lenc[2];
return 0;
}