#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N = 2e5 + 10;
int T, n, m, a, b, x, y;
int vis[N];
vector <int> Edge[N];
void init() {for (int i = 1; i <= n; i ++) vis[i] = 0;return;}
int dfs1(int x) {
int ans = 1;
if(x == b) return 0;
vis[x] = 1;
for (int i : Edge[x]) {
if(vis[i]) continue;
int tmp = dfs1(i);
if(tmp == 0 && x != a) {vis[x] = 0;return 0;}
ans += tmp;
}
return ans;
}
int dfs2(int x) {
int ans = 1;
if(x == a) return 0;
vis[x] = 1;
for (int i : Edge[x]) {
if(vis[i]) continue;
int tmp = dfs2(i);
if(tmp == 0 && x != b) {vis[x] = 0;return 0;}
ans += tmp;
}
return ans;
}
signed main() {
scanf("%lld", &T);
while(T--) {
scanf("%lld%lld", &n, &m);
scanf("%lld%lld", &a, &b);
for (int i = 1; i <= m; i++) {
scanf("%lld%lld", &x, &y);
Edge[x].push_back(y);
Edge[y].push_back(x);
}
init();
int A = dfs1(a) - 1;
init();
int B = dfs2(b) - 1;
printf("%lld\n", A * B);
}
}