#include <iostream>
#include<string>
#include<deque>
using namespace std;
int main() {
//使用一个长度为四的滑动窗口来处理即可(用双向队列来实现)
//如果窗口中出现了三个连续的相同字母,则删掉一个窗口中最后出现的相同字符
//如果窗口中出现两对一样的字母,则去掉第二队的一个字母(也去掉后出现的那个)
int n;
cin >> n;
string line;
while (n--)
{
cin >> line;
int len = line.size();
//如果只有一个或两个字母就直接输出
if (len <= 2)
{
cout << line;
continue;
}
if (len == 3)//判断是否是相同的三个字母
{
if (line[0] == line[1] && line[1] == line[2])
line.erase(2, 1);//删除一个字母
cout << line;
continue;
}
deque<char>win;//窗口中存储四个字符
//先存入三个
for (int i = 0; i < 3; i++)
win.push_back(line[i]);
//开始循环,流程是插入字符,判断是否要弹出元素,然后弹出并输出队列首位置,重复流程
for (int i = 3; i < len; i++)
{
win.push_back(line[i]);
//情况一,后三个为连续的相同字符
if (win[1] == win[2] && win[2] == win[3])
win.pop_back();
//情况二,前三个为连续相同字符
else if (win[0] == win[1] && win[1] == win[2])
win.pop_front();
//情况三,出现两对相同字母
else if (win[0] == win[1] && win[2] == win[3])
win.pop_back();
//输出并弹出首元素
if (win.size() == 4)
{
cout << win.front();
win.pop_front();
}
}
//输出win中剩余的元素
for (char it : win)
cout << it;
cout<<endl;
}
}
// 64 位输出请用 printf("%lld")