import java.util.Scanner;
import java.util.Stack;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int round = in.nextInt();
// 处理多组测试用例
for (int i = 0; i < round; i++) {
String str = in.next();
System.out.println(bubble(str));
}
in.close();
}
public static String bubble(String str) {
Stack<Character> stack = new Stack<>();
for (int i = 0; i < str.length(); i++) {
char current = str.charAt(i);
// 循环处理当前字符与栈顶的反应(可能产生连续反应)
while (!stack.isEmpty()) {
char top = stack.peek();
// 两个小泡泡融合成大泡泡
if (top == 'o' && current == 'o') {
stack.pop(); // 弹出栈顶的'o'
current = 'O'; // 融合后变成大泡泡,继续检查是否与新栈顶反应
}
// 两个大泡泡爆炸消失
else if (top == 'O' && current == 'O') {
stack.pop(); // 弹出栈顶的'O'
current = 0; // 爆炸后消失,用0标记无需入栈
break; // 已爆炸,无需继续检查
}
// 其他情况(不反应),退出循环
else {
break;
}
}
// 如果当前字符未消失(不是爆炸后的状态),则入栈
if (current != 0) {
stack.push(current);
}
}
// 转换栈为字符串
return stackToString(stack);
}
// 栈转字符串工具方法
public static String stackToString(Stack<Character> stack) {
StringBuilder sb = new StringBuilder();
for (Character c : stack) {
sb.append(c);
}
return sb.toString();
}
}