#include<bits/stdc++.h>
using namespace std;
long long c1[1000007],c2[1000007],ra[1000007],fa[1000007],dr[1000007],dc[1000007],st,sz,T,n,m,k,l,k1[2000007],k2[1000007],k3[2000007],cd,lo[1000007],df[1000007],dfn,b[1000007],js;
int bo[1000007],bj[1000007];
vector<int>ve[1000007];
void DD(int x,int y){
k1[++cd]=k2[x];
k2[x]=cd;
k3[cd]=y;
}
void dfs(int x,int y){
df[y]=lo[y]=++dfn;fa[y]=x;
for(int j=k2[y];j;j=k1[j]){
int tt=k3[j];
if(!df[tt]){
dfs(y,tt);
lo[y]=min(lo[y],lo[tt]);
}
else lo[y]=min(lo[y],df[tt]);
}
}
void dfa(int x,int y){
bj[y]=1;//cout<<y<<'\n';
for(int j=k2[y];j;j=k1[j]){
int tt=k3[j];
if(!bj[tt])dfa(y,tt);
}
if(!bo[y]){
ve[lo[y]].push_back(y);
ve[df[fa[y]]].push_back(y);
}
else if(y!=st)ve[df[fa[y]]].push_back(y);
}
void dfz(int x,int y){
bo[y]=1;b[++js]=y;
for(int tt:ve[df[y]]){
if(!bo[tt])dfz(y,tt);
}
}
int main(){
ios::sync_with_stdio(0);
cin.tie(0);cout.tie(0);
cin>>T;
for(int u=1;u<=T;u++){
cin>>n>>m>>st>>sz;js=cd=0;
for(int i=1;i<=n;i++)bj[i]=dr[i]=dc[i]=bo[i]=df[i]=k2[i]=0;
for(int i=1;i<=n;i++)ve[i].clear();
for(int i=1;i<=m;i++){
cin>>c1[i]>>c2[i];
DD(c1[i],c2[i]);DD(c2[i],c1[i]);
}
dfs(0,st);int ts=sz;
while(ts!=st){
bo[ts]=1;ts=fa[ts];
}
bo[st]=1;dfa(0,st);
for(int i=1;i<=n;i++)bo[i]=0;
dfz(0,st);
ts=sz;
for(int i=1;i<=n;i++)ra[b[i]]=i;
for(int i=1;i<=m;i++){
if(ra[c1[i]]>ra[c2[i]])swap(c1[i],c2[i]);
dc[c1[i]]++;dr[c2[i]]++;
//cout<<c1[i]<<' '<<c2[i]<<'\n';
}
int fl=dr[st]|dc[sz];
for(int i=1;i<=n;i++)if(i!=st&&i!=sz)fl|=(!dr[i])|(!dc[i]);
if(fl){
cout<<"No\n";
continue;
}
cout<<"Yes\n";
for(int i=1;i<=m;i++)cout<<c1[i]<<' '<<c2[i]<<'\n';
}
}