#include<iostream>
#include<vector>
#include<cstring>
using namespace std;
const int maxn=310;
vector<int>q[maxn];
int s1,t1,s2,t2,f[maxn],vis[maxn],dis[maxn]={1};
int n,m,a,b,ans,sum;
void dfs(int from,int to){
f[to]=from;
for(int i=0,k=q[to].size();i<k;i++){
int next=q[to][i];
if(next==from||dis[next]==0)continue;
ans++;
vis[to]=min(vis[from]+1,vis[to]);
dfs(to,next);
}
}
int main(){
cin>>n>>m;
vis[0]=0;vis[1]=0;
for(int i=1;i<=m;i++){
cin>>a>>b;
q[a].push_back(b);
q[b].push_back(a);
}
cin>>s1>>t1>>s2>>t2;
memset(vis,0xFF,sizeof(vis));
dfs(0,1);
memset(dis,0,sizeof(dis));
if((vis[s1]>t1)||(vis[s2]>t2)){
cout<<-1;
return 0;
}
for(int i=s1;i;i=f[i])dis[i]=1;
for(int i=s2;i;i=f[i])dis[i]=1;
ans=0;dfs(0,1);
for(int i=1;i<=n;i++){
sum+=dis[i];
}
if(sum==n-1)cout<<-1;
else cout<<m-ans;
}