#include<bits/stdc++.h>
using namespace std;
const int MAXN=1e4+5;
inline int read(){
int s=0,w=1;
char ch=getchar();
while(ch<'0'||ch>'9'){
if(ch=='-'){
w=(~w)+1;
}
ch=getchar();
}
while(ch>='0'&&ch<='9'){
s=(s<<3)+(s<<1)+(ch&15);
ch=getchar();
}
return s*w;
}
inline void write(int x){
if(x<0){
putchar('-');
x=(~x)+1;
}
if(x>9){
write(x/10);
}
putchar(x%10|48);
}
int n,m,ans,s,t;
vector<int> adj[MAXN];
bool vis[MAXN],tag[MAXN];
void bfs(){
queue<int>q;
q.push(s);
vis[s]=1;
while(!q.empty()){
int u=q.front();
q.pop();
for(int i=0;i<adj[u].size();i++){
int v=adj[u][i];
if(!vis[v]){
vis[v]=1;
q.push(v);
}
}
}
}
void dfs(int u){
if(vis[u]||tag[u]){
return ;
}
vis[u]=1;
for(int i=0;i<adj[u].size();i++){
int v=adj[u][i];
dfs(v);
}
return ;
}
int main(){
std::ios::sync_with_stdio(false);
n=read(),m=read();
for(int i=1;i<=m;i++){
int u,v;
u=read(),v=read();
adj[u].push_back(v);
adj[v].push_back(u);
}
s=read(),t=read();
bfs();
if(!vis[t]){
write(-1);
return 0;
}
for(int i=1;i<=n;i++){
memset(vis,0,sizeof(vis));
if(i==s||i==t){
continue;
}
dfs(i);
if(vis[s]&&vis[t]){
ans++;
tag[i]=1;
}
}
write(ans);
return 0;
}