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