#include <iostream>
#include <string>
#include <sstream>
#include <string>
using namespace std;
string konwersjaIntNaString(int liczba)
{
ostringstream ss;
ss << liczba;
string str = ss.str();
return str;
}
int obliczWystapieniaWybranegoZnaku(string wyraz, int pozycjaZnaku)
{
int iloscWystapien = 1;
if(wyraz.length()>pozycjaZnaku)
{
while(wyraz[pozycjaZnaku] == wyraz[pozycjaZnaku+1])
{
iloscWystapien++;
pozycjaZnaku++;
}
}
else
iloscWystapien = 0;
return iloscWystapien;
}
string skracanieWyrazow(string wyrazDoSkrocenia)
{
int dlugosc = wyrazDoSkrocenia.length();
int iloscWystapien;
char powtarzajacySieZnak;
for(int i = 0; i < dlugosc - 2; i++)
{
//sprawdza czy wystepuja 3 takie same znaki po sobie
if((wyrazDoSkrocenia[i] == wyrazDoSkrocenia[i+1])&&(wyrazDoSkrocenia[i+1] == wyrazDoSkrocenia[i+2]))
{
iloscWystapien = obliczWystapieniaWybranegoZnaku(wyrazDoSkrocenia,i);
powtarzajacySieZnak = wyrazDoSkrocenia[i];
wyrazDoSkrocenia.replace(i,iloscWystapien,powtarzajacySieZnak+konwersjaIntNaString(iloscWystapien));
dlugosc = wyrazDoSkrocenia.length();
}
}
return wyrazDoSkrocenia;
}
int main()
{
int iloscTestow;
cin>>iloscTestow;
string wyraz;
for(int i = 0; i<iloscTestow;i++)
{
cin>>wyraz;
cout<<skracanieWyrazow(wyraz)<<endl;
}
cin>>iloscTestow;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8c3N0cmVhbT4KI2luY2x1ZGUgPHN0cmluZz4KCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgpzdHJpbmcga29ud2Vyc2phSW50TmFTdHJpbmcoaW50IGxpY3piYSkKewogICAgb3N0cmluZ3N0cmVhbSBzczsKICAgIHNzIDw8IGxpY3piYTsKICAgIHN0cmluZyBzdHIgPSBzcy5zdHIoKTsKICAgIHJldHVybiBzdHI7Cn0KaW50IG9ibGljeld5c3RhcGllbmlhV3licmFuZWdvWm5ha3Uoc3RyaW5nIHd5cmF6LCBpbnQgcG96eWNqYVpuYWt1KQp7CiAgICBpbnQgaWxvc2NXeXN0YXBpZW4gPSAxOwogICAgaWYod3lyYXoubGVuZ3RoKCk+cG96eWNqYVpuYWt1KQogICAgewogICAgICAgIHdoaWxlKHd5cmF6W3BvenljamFabmFrdV0gPT0gd3lyYXpbcG96eWNqYVpuYWt1KzFdKQogICAgICAgIHsKICAgICAgICAgICAgaWxvc2NXeXN0YXBpZW4rKzsKICAgICAgICAgICAgcG96eWNqYVpuYWt1Kys7CiAgICAgICAgfQogICAgfQogICAgZWxzZQogICAgICAgIGlsb3NjV3lzdGFwaWVuID0gMDsKICAgIHJldHVybiBpbG9zY1d5c3RhcGllbjsKfQoKc3RyaW5nIHNrcmFjYW5pZVd5cmF6b3coc3RyaW5nIHd5cmF6RG9Ta3JvY2VuaWEpCnsKICAgIGludCBkbHVnb3NjID0gd3lyYXpEb1Nrcm9jZW5pYS5sZW5ndGgoKTsKICAgIGludCBpbG9zY1d5c3RhcGllbjsKICAgIGNoYXIgcG93dGFyemFqYWN5U2llWm5hazsKCiAgICBmb3IoaW50IGkgPSAwOyBpIDwgZGx1Z29zYyAtIDI7IGkrKykKICAgIHsKICAgICAgICAvL3NwcmF3ZHphIGN6eSB3eXN0ZXB1amEgMyB0YWtpZSBzYW1lIHpuYWtpIHBvIHNvYmllCiAgICAgICAgaWYoKHd5cmF6RG9Ta3JvY2VuaWFbaV0gPT0gd3lyYXpEb1Nrcm9jZW5pYVtpKzFdKSYmKHd5cmF6RG9Ta3JvY2VuaWFbaSsxXSA9PSB3eXJhekRvU2tyb2NlbmlhW2krMl0pKQogICAgICAgIHsKICAgICAgICAgICAgaWxvc2NXeXN0YXBpZW4gPSBvYmxpY3pXeXN0YXBpZW5pYVd5YnJhbmVnb1puYWt1KHd5cmF6RG9Ta3JvY2VuaWEsaSk7CiAgICAgICAgICAgIHBvd3RhcnphamFjeVNpZVpuYWsgPSB3eXJhekRvU2tyb2NlbmlhW2ldOwogICAgICAgICAgICB3eXJhekRvU2tyb2NlbmlhLnJlcGxhY2UoaSxpbG9zY1d5c3RhcGllbixwb3d0YXJ6YWphY3lTaWVabmFrK2tvbndlcnNqYUludE5hU3RyaW5nKGlsb3NjV3lzdGFwaWVuKSk7CiAgICAgICAgICAgIGRsdWdvc2MgPSB3eXJhekRvU2tyb2NlbmlhLmxlbmd0aCgpOwogICAgICAgIH0KICAgIH0KICAgIHJldHVybiB3eXJhekRvU2tyb2NlbmlhOwp9CmludCBtYWluKCkKewogICAgaW50IGlsb3NjVGVzdG93OwogICAgY2luPj5pbG9zY1Rlc3RvdzsKICAgIHN0cmluZyB3eXJhejsKICAgIGZvcihpbnQgaSA9IDA7IGk8aWxvc2NUZXN0b3c7aSsrKQogICAgewogICAgICAgIGNpbj4+d3lyYXo7CiAgICAgICAgY291dDw8c2tyYWNhbmllV3lyYXpvdyh3eXJheik8PGVuZGw7CiAgICB9CgogICAgY2luPj5pbG9zY1Rlc3RvdzsKCiAgICByZXR1cm4gMDsKfQo=