#include<bits/stdc++.h>
#define N 200005
using namespace std;
int n,x,y;
int xx[N],yy[N];
int head[N],ver[N*2],nxt[N*2],tot;
void add(int a,int b)
{
	tot++;nxt[tot]=head[a];head[a]=tot;ver[tot]=b;return ;
}
int dis[N];
int f[N][20];
void dfs(int x,int fa)
{
	for(int i=head[x];i;i=nxt[i])
	{
		if(ver[i]==fa)continue;
		dis[ver[i]]=dis[x]+1;
		f[ver[i]][0]=x;
		dfs(ver[i],x);
	}
	return ;
}
int ans;
bool v[N];
int lca(int a,int b)
{
	if(dis[a]<dis[b])swap(a,b);
	for(int i=19;i>=0;i--)
	{
		if(dis[f[a][i]]>=dis[b])a=f[a][i];
	}
	if(a==b)return a;
	for(int i=19;i>=0;i--)
	{
		if(f[a][i]!=f[b][i])
		{
			a=f[a][i];b=f[b][i];
		}
	}
	return f[a][0];
}
int calc(int a,int b)
{
	return dis[a]+dis[b]-2*dis[lca(a,b)];
}
void dffs(int x,int fa,int now)
{
	if(ans!=-1)ans=max(ans,(dis[x]-1)*2);
	for(int i=head[x];i;i=nxt[i])
	{
		if(ver[i]==fa)continue;
		if(calc(x,ver[i])>=3)
		{
			ans=-1;
			continue;
		}
		if(dis[ver[i]]<=now+1)continue;
		dffs(ver[i],x,now+1);
	}
	return ;
}

int main()
{
	scanf("%d%d%d",&n,&x,&y);
	int t1,t2;
	for(int i=1;i<n;i++)
	{
		scanf("%d%d",&xx[i],&yy[i]);
	}
	for(int i=1;i<n;i++)
	{
		scanf("%d%d",&t1,&t2);
		add(t1,t2);add(t2,t1);
	}
	dis[y]=1;dfs(y,-1);
	for(int i=1;i<=19;i++)
	{
		for(int j=1;j<=n;j++)
		{
			f[j][i]=f[f[j][i-1]][i-1];
		}
	}
	tot=0;memset(head,0,sizeof(head));
	for(int i=1;i<n;i++)
	{
		add(xx[i],yy[i]);add(yy[i],xx[i]);
	}
	dffs(x,-1,1);
	printf("%d\n",ans);
	return 0;
}