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