#include<bits/stdc++.h>
using namespace std;
const long long MaxN = 1e6 + 5;
vector<long long> arr[MaxN];
long long n,m,a,b;
bool visited[MaxN];
long long da[MaxN], db[MaxN];
void bfs(long long x, vector<long long> arr[], bool visited[], long long d[])
{
queue<long long> qu;
qu.push(x);
visited[x] = true;
while (!qu.empty())
{
long long u=qu.front();
qu.pop();
for (long long v : arr[u])
{
if (!visited[v])
{
visited[v] = true;
qu.push(v);
d[v] = d[u] + 1;
}
}
}
}
void input()
{
cin >> n >> m >> a >> b;
for (long long i=1; i<=m; i++)
{
long long u,v;
cin >> u >> v;
arr[u].push_back(v);
arr[v].push_back(u);
}
}
void solve()
{
for (long long i=1; i<=n; i++)
{
visited[i] = false;
}
bfs(a, arr, visited, da);
for (long long i=1; i<=n; i++)
{
visited[i] = false;
}
bfs(b, arr, visited, db);
long long res=0;
for (long long i=1; i<=n; i++)
{
if (da[i] <= db[i])
{
res++;
}
}
cout << res;
}
int main()
{
ios_base::sync_with_stdio(0);
cin.tie(0);
input();
solve();
}
CiNpbmNsdWRlPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgpjb25zdCBsb25nIGxvbmcgTWF4TiA9IDFlNiArIDU7Cgp2ZWN0b3I8bG9uZyBsb25nPiBhcnJbTWF4Tl07CmxvbmcgbG9uZyBuLG0sYSxiOwpib29sIHZpc2l0ZWRbTWF4Tl07CmxvbmcgbG9uZyBkYVtNYXhOXSwgZGJbTWF4Tl07Cgp2b2lkIGJmcyhsb25nIGxvbmcgeCwgdmVjdG9yPGxvbmcgbG9uZz4gYXJyW10sIGJvb2wgdmlzaXRlZFtdLCBsb25nIGxvbmcgZFtdKQp7CiAgICBxdWV1ZTxsb25nIGxvbmc+IHF1OwoKICAgIHF1LnB1c2goeCk7CiAgICB2aXNpdGVkW3hdID0gdHJ1ZTsKCiAgICB3aGlsZSAoIXF1LmVtcHR5KCkpCiAgICB7CiAgICAgICAgbG9uZyBsb25nIHU9cXUuZnJvbnQoKTsKICAgICAgICBxdS5wb3AoKTsKCiAgICAgICAgZm9yIChsb25nIGxvbmcgdiA6IGFyclt1XSkKICAgICAgICB7CiAgICAgICAgICAgIGlmICghdmlzaXRlZFt2XSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdmlzaXRlZFt2XSA9IHRydWU7CiAgICAgICAgICAgICAgICBxdS5wdXNoKHYpOwogICAgICAgICAgICAgICAgZFt2XSA9IGRbdV0gKyAxOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQp9Cgp2b2lkIGlucHV0KCkKewogICAgY2luID4+IG4gPj4gbSA+PiBhID4+IGI7CgogICAgZm9yIChsb25nIGxvbmcgaT0xOyBpPD1tOyBpKyspCiAgICB7CiAgICAgICAgbG9uZyBsb25nIHUsdjsKCiAgICAgICAgY2luID4+IHUgPj4gdjsKCiAgICAgICAgYXJyW3VdLnB1c2hfYmFjayh2KTsKICAgICAgICBhcnJbdl0ucHVzaF9iYWNrKHUpOwogICAgfQp9Cgp2b2lkIHNvbHZlKCkKewogICAgZm9yIChsb25nIGxvbmcgaT0xOyBpPD1uOyBpKyspCiAgICB7CiAgICAgICAgdmlzaXRlZFtpXSA9IGZhbHNlOwogICAgfQoKICAgIGJmcyhhLCBhcnIsIHZpc2l0ZWQsIGRhKTsKCiAgICBmb3IgKGxvbmcgbG9uZyBpPTE7IGk8PW47IGkrKykKICAgIHsKICAgICAgICB2aXNpdGVkW2ldID0gZmFsc2U7CiAgICB9CgogICAgYmZzKGIsIGFyciwgdmlzaXRlZCwgZGIpOwoKICAgIGxvbmcgbG9uZyByZXM9MDsKCiAgICBmb3IgKGxvbmcgbG9uZyBpPTE7IGk8PW47IGkrKykKICAgIHsKICAgICAgICBpZiAoZGFbaV0gPD0gZGJbaV0pCiAgICAgICAgewogICAgICAgICAgICByZXMrKzsKICAgICAgICB9CiAgICB9CgogICAgY291dCA8PCByZXM7Cn0KCmludCBtYWluKCkKewogICAgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbygwKTsKICAgIGNpbi50aWUoMCk7CgogICAgaW5wdXQoKTsKICAgIHNvbHZlKCk7Cn0K