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