#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")