#include<bits/stdc++.h> #define pb push_back usingnamespace std; typedeflonglong LL; constint N=1e5+5,M=2e5+5,MOD=1e9+7; int n,m,ind[N],st,ed,d[N],g[N]; vector<int> G[N]; inlineintny(int a){ int s=1,b=MOD-2; while (b){ if (b&1) s=(LL)s*a%MOD; a=(LL)a*a%MOD,b>>=1; } return s; } signedmain(){ cin>>n>>m>>st>>ed;++ind[ed]; for (int i=1;i<=m;++i){ int x,y;cin>>x>>y; G[x].pb(y); ++ind[y],++d[y]; } int ans=1; for (int i=2;i<=n;++i){ ans=(LL)ans*ind[i]%MOD; } if (ed==1) return cout<<ans,0; queue<int> q; if (ind[ed]) g[ed]=(LL)ans*ny(ind[ed])%MOD; for (int i=1;i<=n;++i){ if (!d[i]) q.push(i); } while (!q.empty()){ int cur=q.front();q.pop(); for (int i=0;i<(int)G[cur].size();++i){ int to=G[cur][i]; --d[to]; if (!d[to]) q.push(to); g[to]=(g[to]+(LL)g[cur]*ny(ind[to])%MOD)%MOD; } } cout<<(ans-g[st]+MOD)%MOD; return0; }