← Home
#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';
	}
}