#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){//ans±íʾ·¾¶ÉÏÓм¸¸ö¸îµã 
	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;
}