RT,过不了 Hack
#include<bits/stdc++.h>
using namespace std;
inline int read(){
int res=0;
char ch=getchar();
while(ch<'0'||ch>'9')
ch=getchar();
while(ch>='0'&&ch<='9'){
res=(res<<1)+(res<<3)+(ch^'0');
ch=getchar();
}
return res;
}
const int maxn=2e5+5,inf=0x3f3f3f3f;
int n,tot,num,l,r,dfn[maxn],low[maxn];
bool flg[maxn],v[maxn];
vector<int> G1[maxn],G2[maxn<<1];
stack<int> s;
void Tarjan(int u,int root){
low[u]=dfn[u]=++tot;
int cnt=0;
s.push(u);
for(int i=0,len=G1[u].size();i<len;++i){
int v=G1[u][i];
if(!dfn[v]){
Tarjan(v,root);
low[u]=min(low[u],low[v]);
if(v!=root&&dfn[u]<=low[v]){
flg[u]=1;
++num;
while(s.top()!=v){
G2[num].push_back(s.top());
G2[s.top()].push_back(num);
s.pop();
}
G2[num].push_back(v);
G2[v].push_back(num);
s.pop();
G2[num].push_back(u);
G2[u].push_back(num);
}
++cnt;
} else
low[u]=min(low[u],dfn[v]);
}
if(u==root&&cnt>1)
flg[u]=1;
}
void dfs(int u,int num){
if(v[u])
return;
v[u]=1;
if(u==r){
if(num==inf)
puts("No solution");
else
printf("%d\n",num);
exit(0);
}
for(int i=0,len=G2[u].size();i<len;++i){
int v=G2[u][i];
if(v!=r&&flg[v])
dfs(v,min(num,v));
else
dfs(v,num);
}
}
int main(){
num=n=read();
while(1){
int u=read(),v=read();
if(!u&&!v)
break;
G1[u].push_back(v);
G1[v].push_back(u);
}
for(int i=1;i<=n;++i)
if(!dfn[i])
Tarjan(i,i);
l=read(),r=read();
dfs(l,inf);
puts("No solution");
return 0;
}