#include <iostream>
#include <vector>
using namespace std;
int N, M, u, v;
vector <int> road[102];
void read ()
{
cin>>N>>M>>u>>v;
for (int i=1; i<=M; i++)
{
int A, B;
cin>>A>>B;
road[A].push_back(B);
}
}
int check[102], mark[102];
void init ()
{
for (int i=1; i<=N; i++)
{
check[i]=0;
mark[i]=1;
}
}
void find_similar ()
{
for (int i=1; i<=N; i++)
{
if (check[i]==1 && mark[i]==1)
{
mark[i]=1;
}
else mark[i]=0;
}
}
void DQ_QL (int r, int End)
{
if (r==End)
{
find_similar ();
}
else
{
for (int i=0; i<road[r].size(); i++)
{
int v=road[r][i];
if (check[v]==0)
{
check[v]=1;
DQ_QL (v, End);
check[v]=0;
}
}
}
}
int main ()
{
int t;
cin>>t;
while (1)
{
if (t==0) break;
t--;
read ();
init ();
check[u]=1;
DQ_QL (u, v);
check[u]=0; // ^^;
int count = 0;
for (int i=1; i<=N; i++)
{
if (i!=u && i!=v && mark[i]==1) count++;
}
cout<<count<<endl;
for (int i=1; i<=100; i++) road[i].clear();
}
return 0;
}