#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")