#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
*/