#include <iostream>
#include <stack>
#include <vector>
#include <algorithm>
//仍然推荐用到什么功能就调用它的头文件,少依赖万能头
using namespace std;
int main() {
int n{};
cin>>n;
while(n--){//n次循环
stack<char> ss;//每次重新定义栈,也可以在每次循环结束前清空栈
string a;//原因同上
cin>>a;
for(int i=0;i<a.size();i++)//遍历字符串
{
if(!ss.empty())//如果栈不为空,进入下一步判断
{
if(a[i]=='o'&&ss.top()=='o')//这里处理的是两个小泡泡相遇
{
ss.pop();//先出栈,然后再判断
if(ss.empty())//如果出栈后为空栈,压入字符“O”
{
ss.push('O');
continue;//continue不要忘记
}
else{
if(ss.top()=='O')//如果出栈后遇到大泡泡,继续出栈,模拟泡泡破裂
{
ss.pop();
continue;
}
else{//其他情况都是压栈
ss.push('O');
continue;
}
}
}
else if(a[i]=='O'&&ss.top()=='O')//如果两个大泡泡相遇就出栈,
{
ss.pop();
continue;
}
}
if(a[i]=='o'||a[i]=='O')//如果空栈或者没遇到特殊情况就压栈
{
ss.push(a[i]);
}
}
vector<char> b;//定义一个vector用于输出
while(!ss.empty())//如果栈不为空就将栈顶元素推入vector
{
b.push_back(ss.top());
ss.pop();//推完后出栈
}
reverse(b.begin(),b.end());//翻转vector内的元素,因为栈是后进先出
for(int i=0;i<b.size();i++)//输出vector内元素
{
cout<<b[i];
}
cout<<endl;
}
return 0;
}
// 64 位输出请用 printf("%lld")