#include <bits/stdc++.h>
using namespace std;
#define ll int
const int inf = INT_MAX;
const int MAXN = 1e5 + 7;
queue <int> q;
vector <int>a[MAXN];
int n, m, s, t, d_u[MAXN], d_v[MAXN], ans;
void bfs(int *dist, int s){
q.push(s);
fill(dist + 1, dist + 1 + n, inf);
dist[s] = 0;
while(!q.empty()){
int u = q.front();
q.pop();
for(auto v : a[u]){
if(dist[v] > dist[u] + 1){
dist[v] = dist[u] + 1;
q.push(v);
}
}
}
}
int main(){
ios_base::sync_with_stdio(0);
cout.tie(0);
cin.tie(0);
cin >> n >> m >> s >> t;
for(int i = 1; i <= m; i++){
int x, y;
cin >> x >> y;
a[x].push_back(y);
a[y].push_back(x);
}
bfs(d_u, s);
bfs(d_v, t);
for(int i = 1; i <= n; i++) if(d_u[i] <= d_v[i]) ans++;
cout << ans;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiNkZWZpbmUgbGwgaW50CmNvbnN0IGludCBpbmYgPSBJTlRfTUFYOwpjb25zdCBpbnQgTUFYTiA9IDFlNSArIDc7CnF1ZXVlIDxpbnQ+IHE7CnZlY3RvciA8aW50PmFbTUFYTl07CmludCBuLCBtLCBzLCB0LCBkX3VbTUFYTl0sIGRfdltNQVhOXSwgYW5zOwoKdm9pZCBiZnMoaW50ICpkaXN0LCBpbnQgcyl7CiAgICBxLnB1c2gocyk7CiAgICBmaWxsKGRpc3QgKyAxLCBkaXN0ICsgMSArIG4sIGluZik7CiAgICBkaXN0W3NdID0gMDsKICAgIHdoaWxlKCFxLmVtcHR5KCkpewogICAgICAgIGludCB1ID0gcS5mcm9udCgpOwogICAgICAgIHEucG9wKCk7CiAgICAgICAgZm9yKGF1dG8gdiA6IGFbdV0pewogICAgICAgICAgICBpZihkaXN0W3ZdID4gZGlzdFt1XSArIDEpewogICAgICAgICAgICAgICAgZGlzdFt2XSA9IGRpc3RbdV0gKyAxOwogICAgICAgICAgICAgICAgcS5wdXNoKHYpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQp9CgoKaW50IG1haW4oKXsKICAgIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oMCk7CiAgICBjb3V0LnRpZSgwKTsKICAgIGNpbi50aWUoMCk7CiAgICBjaW4gPj4gbiA+PiBtID4+IHMgPj4gdDsKICAgIGZvcihpbnQgaSA9IDE7IGkgPD0gbTsgaSsrKXsKICAgICAgICBpbnQgeCwgeTsKICAgICAgICBjaW4gPj4geCA+PiB5OwogICAgICAgIGFbeF0ucHVzaF9iYWNrKHkpOwogICAgICAgIGFbeV0ucHVzaF9iYWNrKHgpOwogICAgfQogICAgYmZzKGRfdSwgcyk7CiAgICBiZnMoZF92LCB0KTsKICAgIGZvcihpbnQgaSA9IDE7IGkgPD0gbjsgaSsrKSBpZihkX3VbaV0gPD0gZF92W2ldKSBhbnMrKzsKICAgIGNvdXQgPDwgYW5zOwp9