import java.util.ArrayDeque;
import java.util.Deque;
import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Deque<Character> stackDeque=new ArrayDeque<>();
		Scanner scanner=new Scanner(System.in);
		int t=scanner.nextInt();
		for (int i = 0; i < t; i++) {
			String string=scanner.next();
			for (int j = 0; j < string.length(); j++) {
				char c=string.charAt(j);
				if(stackDeque.isEmpty()) {
					stackDeque.push(c);
				}else {
					char a=stackDeque.peek();
					if(a==c) {
						if(c=='o') {
							stackDeque.pop();
							if(stackDeque.isEmpty()) {
								stackDeque.push('O');
							}else {
								a=stackDeque.peek();
								if(a=='O') {
									stackDeque.pop();
								}else {
									stackDeque.push('O');
								}
							}

							
							
						}else if(c=='O') {
							stackDeque.pop();
						}
					}else {
						stackDeque.push(c);
					}
				}
			}
			StringBuilder sBuilder=new StringBuilder();


			for (Character d : stackDeque) {
				sBuilder.append(d);
                stackDeque.pop();
			}
			System.out.println(sBuilder.reverse());
			
		}

	}

}

感觉我做得有点复杂了,其实就是拿着新字符去跟栈里面的栈顶元素比对,如果一样就进行相应的操作,不一样就直接压栈,应当注意,这道题输出时,要求是正序输出,而栈的正常输出方式为逆序,所以我们要想办法解决这个问题,我才用的是StringBuilder,它的reverse可以很好地解决该问题,还有就是,如果采用增强for循环来遍历,需要注意遍历完要把栈顶元素出栈,我被这一点卡过