← Home
#include<bits/stdc++.h>
#define il inline
using namespace std;
 
constexpr int MAXN=2e5+5;
int T,n,pre[MAXN],suf[MAXN];
string s;
vector<int>v[3];
bool vis[MAXN];
set<int>st[3];
 
namespace B{
	#define lowbit(x) (x&-x)
	int c[MAXN];
	il void init(){
		memset(c,0,(n+1)<<2);
	}
	il void add(int x,int k){
		for(;x<=n;x+=lowbit(x)) c[x]+=k;
	}
	il int ask(int x){
		int res=0;
		for(;x;x-=lowbit(x)) res+=c[x];
		return res;
	}
}
il int sht(char x){
	if(x=='Y') return 0;
	if(x=='D') return 1;
	return 2;
}
il void ins(char x,char y,int i){
	if(x=='D'&&y=='X') st[0].insert(st[0].end(),i);
	else if(x=='X'&&y=='D') st[0].insert(st[0].end(),i);
	else if(x=='Y'&&y=='X') st[1].insert(st[1].end(),i);
	else if(x=='X'&&y=='Y') st[1].insert(st[1].end(),i);
	else if(x=='D'&&y=='Y') st[2].insert(st[2].end(),i);
	else st[2].insert(st[2].end(),i);
}
il void delt(int i){
//	cerr<<"delt "<<i<<' '<<suf[i]<<'\n';
	if(i<n){
		if(s[i]=='D'&&s[suf[i]]=='X') st[0].erase(i);
		else if(s[i]=='X'&&s[suf[i]]=='D') st[0].erase(i);
		else if(s[i]=='Y'&&s[suf[i]]=='X') st[1].erase(i);
		else if(s[i]=='X'&&s[suf[i]]=='Y') st[1].erase(i);
		else if(s[i]=='D'&&s[suf[i]]=='Y') st[2].erase(i);
		else st[2].erase(i);
	}
}
il void del(int i){
	delt(i);
	pre[suf[i]]=pre[i];
	suf[pre[i]]=suf[i];
}
il void sve(){
	cin>>s;
	n=s.size();
	s=' '+s;
	suf[0]=1,pre[n+1]=n;
	for(int i=1;i<=n;i++){
		v[sht(s[i])].push_back(i);
		B::add(i,1);
		pre[i]=i-1,suf[i]=i+1;
	}
	for(int t:{0,1,2}){
		if((int)v[t].size()!=n/3) return cout<<"NO\n",void();
		for(int i=0;i<n/3-1;i++) if(v[t][i]+1==v[t][i+1]) return cout<<"NO\n",void();
	}
	cout<<"YES\n";
	for(int i=1;i<n;i++) ins(s[i],s[i+1],i);
	vector<tuple<char,int,char,int,char,int>>ans;
	for(int i=n;i;i--){
		if(vis[i]) continue;
//		cerr<<"chk "<<i<<'\n';
		int op=sht(s[i]);
		int pos=*st[op].rbegin();
		if(suf[suf[pos]]==i||s[pre[pos]]!=s[suf[suf[pos]]]){
			ans.emplace_back(s[pos],B::ask(pre[pos]),s[suf[pos]],B::ask(pos),s[i],B::ask(pre[i]));
			B::add(pos,-1);
			B::add(suf[pos],-1);
			B::add(i,-1);
			delt(pre[pos]),delt(pre[i]);
			vis[pos]=vis[suf[pos]]=vis[i]=1;
			st[op].erase(--st[op].end());
			del(pos),del(suf[pos]),del(i);
			int pr=pre[pos],nx=suf[pr];
			if(nx<i) ins(s[pr],s[nx],pr);
		}else{
			int sz=B::ask(pre[pos]);
			ans.emplace_back(s[pos],sz,s[suf[pos]],sz+1,s[suf[suf[pos]]],sz+2);
			B::add(pos,-1);
			B::add(suf[pos],-1);
			B::add(suf[suf[pos]],-1);
			delt(pre[pos]);
			vis[pos]=vis[suf[pos]]=vis[suf[suf[pos]]]=1;
			st[op].erase(--st[op].end());
			del(pos),del(suf[pos]),del(suf[suf[pos]]);
			int pr=pre[pos],nx=suf[pr];
			ins(s[pr],s[nx],pr);
			i++;
		}
//		cerr<<"lst:\n";
//		for(int t:{0,1,2}){
//			cerr<<"size "<<t<<' '<<st[t].size()<<'\n';
//			for(auto x:st[t]) cerr<<x<<' ';
//			cerr<<'\n';
//		}
	}
	s.erase(s.begin());
	cout<<s<<'\n';
	reverse(ans.begin(),ans.end());
	for(auto p:ans)
		cout<<get<0>(p)<<' '<<get<1>(p)<<' '<<get<2>(p)<<' '<<get<3>(p)<<' '<<get<4>(p)<<' '<<get<5>(p)<<'\n';
}
il void cls(){
	B::init();
	memset(vis,0,n+1);
	v[0].clear(),v[1].clear(),v[2].clear();
	st[0].clear(),st[1].clear(),st[2].clear();
}
 
int main(){
	cin.tie(nullptr)->sync_with_stdio(0);
	cin>>T;
	while(T--) sve(),cls();
	return 0;
}
/*
1
XDXYDY
*/