#include <iostream> #include <stack> #include <string> #include <vector> using namespace std; int main() { int T; cin >> T; while (T--) { string zifuchuan; cin >> zifuchuan; if (zifuchuan.empty()) { cout << endl; continue; } stack<char> zhan; zhan.push(zifuchuan[0]); for (int i = 1; i < zifuchuan.size(); i++) { char current = zifuchuan[i]; if (zhan.empty()) { zhan.push(current); continue; } char top = zhan.top(); if (current == 'O' && top == 'O') { // 两个大泡泡爆炸 zhan.pop(); } else if (current == 'o' && top == 'o') { // 两个小泡泡融合成大泡泡 zhan.pop(); zhan.push('O'); // 检查新产生的大泡泡是否引发连锁反应 if (zhan.size() >= 2) { char new_top = zhan.top(); // 新产生的'O' zhan.pop(); char next_top = zhan.top(); // 原来的栈顶 if (new_top == 'O' && next_top == 'O') { // 新产生的大泡泡和原来的大泡泡爆炸 zhan.pop(); } else { zhan.push(new_top); } } } else { zhan.push(current); } } // 正确地从栈中提取结果 vector<char> result; while (!zhan.empty()) { result.push_back(zhan.top()); zhan.pop(); } // 反转结果(因为栈是后进先出) for (int i = result.size() - 1; i >= 0; i--) { cout << result[i]; } cout << endl; } return 0; }