import java.util.Scanner;
import java.util.Stack;

// 吐泡泡
// 参考:https://blog.nowcoder.net/n/1838035085e249afac306e299b4ee1a7
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int T = in.nextInt();
        // 没有考虑从左至右的顺序
        // while (T-- > 0) {
        //     String s = in.next();
        //     while (s.indexOf("OO") != -1 || s.indexOf("oo") != -1) {
        //         s = s.replaceAll("ooO|Ooo|OO|oooo", "")
        //             .replaceAll("oo", "O");
        //     }
        //     System.out.println(s);
        // }
        Stack<Character> st = new Stack<>();
        char SMALL_o = 'o';
        char Big_O = 'O';
        while (T-- > 0) {
            String s = in.next();
            for (char c : s.toCharArray()) {
                //        oooOO
                // stack: o
                if (st.isEmpty() || (!st.isEmpty() && c != st.peek())) {
                    st.push(c);
                } else if (c == SMALL_o && c == st.peek()) {
				  // 当前是'o',并且==栈顶元素,弹出栈顶元素
				  // 接着再判断栈顶元素,如果是'O',则弹出
				  // 如果不是'O',则把oo合并后的结果'O'压入栈顶
                    st.pop();
                    if(!st.isEmpty() && Big_O == st.peek()){
                        st.pop();
                    }else{
                        st.push(Big_O);
                    }
                } else if (c == Big_O && c == st.peek()) {
                    st.pop();
                }
            }
            StringBuilder sb = new StringBuilder();
            while (!st.isEmpty()) {
                sb.append(st.pop());
            }
		  // 逆序输出栈元素
            System.out.println(sb.reverse());
        }
    }
}