
#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();
}
