#include<bits/stdc++.h>
#define int long long
const int N = 4e5+5;
using namespace std;
int n,dfn[N],low[N];
int cnt = 0;
vector<int> g[N],fg[N];
int a,b;
void add(int u,int v)
{
g[u].push_back(v);
}
stack<int>sp;
int nn; void tarjan(int u,int fa){
dfn[u] = low[u] = ++cnt;
sp.push(u);
for(auto i:g[u]){
int v = i;
if(!dfn[v]){
tarjan(v,u);
low[u] = min(low[u],low[v]);
if(dfn[u] <= dfn[v]){
nn++;
while(!false){
int t=sp.top();sp.pop();
fg[nn].push_back(t);
fg[t].push_back(nn);
if(t==v)
break;
}
fg[nn].push_back(u);
fg[u].push_back(nn);
}
}else{
if(v!=fa){
low[u] = min(low[u],dfn[v]);
}
}
}
}
void dfs(int u,int ans,int fa){ if(u==b){
if(ans==0){
cout<<"No Solution";
}else{
cout<<ans;
}
exit(0);
}
if(u!=a&&fg[u].size() > 1 && u<=n){
if(ans==0){
ans=u;
}else{
ans=min(ans,u);
}
}
for(auto i:fg[u]){
if(i==fa) continue;
dfs(i,ans,u);
}
}
signed main(){
cin>>n;
int x,y = x = 1;
while(x!=0 || y!=0){
cin>>x>>y;
if(!x || !y) break;
add(x,y),add(y,x);
}
cin>>a>>b;
tarjan(a,0);
if(dfn[b] == 0){
cout<<"No Solution\n";
}else{
dfs(a,0,0);
}
return 0;
}