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();
    }
}