#include<iostream>
#include<string.h>
#include<cstdio>
#include<queue>
#define max1 105
using namespace std;
int n;
vector<int> rem[max1];
vector<int>rem2[max1];
queue<int>b;
int depth = 0;
int dp[max1];
int dp2[max1];
int dp3[max1];
int dp4[max1];
int size1=0, size2 = 0;
void bfs(int k) {
b.push(k);
depth++;
dp[k] = 1;
while (!b.empty()) {
int fr = b.front();
for (int i = 0; i < rem[fr].size(); i++) {
int right = rem[fr][i];
b.push(right);
dp[right] = dp[fr] + 1;
depth = max(dp[right], depth);
}
b.pop();
}
}
void dfs(int k,int *dp,int& size) {
dp[++size] = k;
int nex = rem2[k][0];
while (!rem2[nex].empty()) {
dp[++size] = nex;
nex = rem2[nex][0];
}
dp[++size] = nex;
}
int main()
{
cin >> n;
int left, right;
for (int i = 1; i < n; i++) {
scanf("%d %d", &left,&right);
rem[left].push_back(right);
rem2[right].push_back(left);
}
cin >> left >> right;
bfs(1);
dfs(left,dp3,size1);
dfs(right, dp4, size2);
int If = 0;
int sum = 0;
for (int i = 1; i <= size1; i++) {
for (int j = 1; j <= size2; j++) {
if (dp3[i] == dp4[j]) {
If = 1;
sum += (i - 1) * 2 + j - 1;
}
}
if (If)
break;
}
int t_max = 0;
for (int i = 1; i < n; i++) {
dp2[dp[i]]++;
t_max = max(dp2[dp[i]], t_max);
}
cout << depth << endl << t_max<<endl<<sum;
return 0;
}