#include<bits/stdc++.h>
using namespace std;
const int N=2e5+5;
int n,a,b,rt=1,dfn[N],low[N],st[N],tp,t,tot,col[N],ans=1000000000;
bool iscut[N],inst[N];
vector <int> v[N];
void tarjan(int u,int fa)
{
// cout<<u<<" "<<fa<<"\n";
dfn[u]=low[u]=++t;
st[++tp]=u;
inst[u]=1;
int child=0;
for(int i=0;i<v[u].size();i++)
{
int v2=v[u][i];
if(!dfn[v2])
{
child++;
tarjan(v2,u);
low[u]=min(low[u],low[v2]);
if(u!=rt && low[v2]>=dfn[u])
{
if(u!=a && u!=b && ((dfn[a]>=dfn[i] && dfn[i]>=dfn[b]) || (dfn[b]>=dfn[i] && dfn[i]>=dfn[a]) || (dfn[v2]<=dfn[a] && dfn[v2]>dfn[b]) || (dfn[v2]<=dfn[b] && dfn[v2]>dfn[a])))
{
ans=min(ans,u);
}
}
else if(u==rt)
{
child++;
if(child>1)
{
if(u!=a && u!=b && ((dfn[a]>=dfn[i] && dfn[i]>=dfn[b]) || (dfn[b]>=dfn[i] && dfn[i]>=dfn[a]) || (dfn[v2]<=dfn[a] && dfn[v2]>dfn[b]) || (dfn[v2]<=dfn[b] && dfn[v2]>dfn[a])))
{
ans=min(ans,u);
}
}
}
}else if(inst[v2] && v2!=fa) low[u]=min(low[u],dfn[v2]);
}
}
int main()
{
cin>>n;
int u,v2;
cin>>u>>v2;
while(u!=0 && v2!=0)
{
v[u].push_back(v2);
v[v2].push_back(u);
cin>>u>>v2;
}
cin>>a>>b;
for(int i=1;i<=n;i++)
{
if(!dfn[i]) tarjan(i,0);
}
if(ans==1000000000) cout<<"No solution";
else cout<<ans;
}