#include <iostream>
#include <string>
#include <regex>
using namespace std;
string WordReplaceMatches(string str, regex pattern)
{
smatch matches;
while(regex_search(str, matches, pattern))
{
string matches0;
matches0+=matches[0];
string wordTemp;
if (matches[1]!="")
wordTemp+=matches[1];
else
wordTemp+=matches[3];
size_t position=-1;
int licznik=0;
while((position=matches0.find(wordTemp, ++position))!=string::npos)
{
licznik++;
}
string patternTempReplace;
patternTempReplace+=wordTemp;
patternTempReplace+='/';
patternTempReplace+=to_string(licznik);
str=regex_replace(str, pattern, patternTempReplace, regex_constants::format_first_only);
}
return str;
}
string LetterReplaceMatches(string str, regex pattern)
{
smatch matches;
while(regex_search(str, matches, pattern))
{
string matchTemp=matches[0];
string patternTemp;
patternTemp+=matches[1];
patternTemp+='*';
patternTemp+=to_string(matchTemp.size());
str=regex_replace(str,pattern,patternTemp,regex_constants::format_first_only);
}
return str;
}
string Decomp_LetterReplaceMatches(string str, regex pattern)
{
smatch matches;
while(regex_search(str, matches, pattern))
{
string slicznik=matches[0];
slicznik=slicznik.substr(2,slicznik.size()-1);
int licznik=stoi(slicznik);
string letterTemp=matches[0];
letterTemp=letterTemp.substr(0,1);
string patternTemp;
for (int i=0; i<licznik; i++)
{
patternTemp+=letterTemp;
}
str=regex_replace(str,pattern, patternTemp, regex_constants::format_first_only);
}
return str;
}
string Decomp_WordReplaceMatches(string str, regex pattern)
{
smatch matches;
while(regex_search(str, matches, pattern))
{
string temp=matches[0];
size_t position=temp.find("/");
string tempWord=temp.substr(0,position);
int licznik=stoi(temp.substr(position+1,temp.size()-position));
string patternTemp;
for (int i=0; i<licznik; i++)
{
patternTemp+=tempWord+" ";
}
patternTemp.pop_back();
str=regex_replace(str,pattern, patternTemp, regex_constants::format_first_only);
}
return str;
}
int main()
{
string choose;
getline(cin,choose);
if (choose=="KOMPRESJA")
{
string line,str;
while (getline(cin,line) && line!="")
{
str+=line;
}
regex letter_pattern("([a-z])\\1{3,}");
str=LetterReplaceMatches(str,letter_pattern);
regex word_pattern ("([a-z])(\\s\\1){2,}|([\\*a-z0-9]{2,})(\\s\\3){1,}");
str=WordReplaceMatches(str,word_pattern);
cout<<str<<endl;
}
else if (choose=="DEKOMPRESJA")
{
string line,str;
while (getline(cin,line) && line!="")
{
str+=line;
}
regex letter_pattern("[a-z]{1}\\*\\d+");
str=Decomp_LetterReplaceMatches(str,letter_pattern);
regex word_pattern ("\\w+\\/\\d+");
str=Decomp_WordReplaceMatches(str,word_pattern);
cout<<str<<endl;
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8cmVnZXg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgpzdHJpbmcgV29yZFJlcGxhY2VNYXRjaGVzKHN0cmluZyBzdHIsIHJlZ2V4IHBhdHRlcm4pCnsKICAgIHNtYXRjaCBtYXRjaGVzOwogICAgd2hpbGUocmVnZXhfc2VhcmNoKHN0ciwgbWF0Y2hlcywgcGF0dGVybikpCiAgICB7CiAgICAgICAgc3RyaW5nIG1hdGNoZXMwOwogICAgICAgIG1hdGNoZXMwKz1tYXRjaGVzWzBdOwogICAgICAgIHN0cmluZyB3b3JkVGVtcDsKICAgICAgICBpZiAobWF0Y2hlc1sxXSE9IiIpCiAgICAgICAgICAgIHdvcmRUZW1wKz1tYXRjaGVzWzFdOwogICAgICAgIGVsc2UKICAgICAgICAgICAgd29yZFRlbXArPW1hdGNoZXNbM107CiAgICAgICAgc2l6ZV90IHBvc2l0aW9uPS0xOwogICAgICAgIGludCBsaWN6bmlrPTA7CiAgICAgICAgd2hpbGUoKHBvc2l0aW9uPW1hdGNoZXMwLmZpbmQod29yZFRlbXAsICsrcG9zaXRpb24pKSE9c3RyaW5nOjpucG9zKQogICAgICAgIHsKICAgICAgICAgICAgbGljem5paysrOwogICAgICAgIH0KICAgICAgICBzdHJpbmcgcGF0dGVyblRlbXBSZXBsYWNlOwogICAgICAgIHBhdHRlcm5UZW1wUmVwbGFjZSs9d29yZFRlbXA7CiAgICAgICAgcGF0dGVyblRlbXBSZXBsYWNlKz0nLyc7CiAgICAgICAgcGF0dGVyblRlbXBSZXBsYWNlKz10b19zdHJpbmcobGljem5payk7CiAgICAgICAgc3RyPXJlZ2V4X3JlcGxhY2Uoc3RyLCBwYXR0ZXJuLCBwYXR0ZXJuVGVtcFJlcGxhY2UsIHJlZ2V4X2NvbnN0YW50czo6Zm9ybWF0X2ZpcnN0X29ubHkpOwogICAgfQogICAgcmV0dXJuIHN0cjsKfQpzdHJpbmcgTGV0dGVyUmVwbGFjZU1hdGNoZXMoc3RyaW5nIHN0ciwgcmVnZXggcGF0dGVybikKewogICAgc21hdGNoIG1hdGNoZXM7CiAgICB3aGlsZShyZWdleF9zZWFyY2goc3RyLCBtYXRjaGVzLCBwYXR0ZXJuKSkKICAgIHsKICAgICAgICBzdHJpbmcgbWF0Y2hUZW1wPW1hdGNoZXNbMF07CiAgICAgICAgc3RyaW5nIHBhdHRlcm5UZW1wOwogICAgICAgIHBhdHRlcm5UZW1wKz1tYXRjaGVzWzFdOwogICAgICAgIHBhdHRlcm5UZW1wKz0nKic7CiAgICAgICAgcGF0dGVyblRlbXArPXRvX3N0cmluZyhtYXRjaFRlbXAuc2l6ZSgpKTsKICAgICAgICBzdHI9cmVnZXhfcmVwbGFjZShzdHIscGF0dGVybixwYXR0ZXJuVGVtcCxyZWdleF9jb25zdGFudHM6OmZvcm1hdF9maXJzdF9vbmx5KTsKICAgIH0KICAgIHJldHVybiBzdHI7Cn0KCnN0cmluZyBEZWNvbXBfTGV0dGVyUmVwbGFjZU1hdGNoZXMoc3RyaW5nIHN0ciwgcmVnZXggcGF0dGVybikKewogICAgc21hdGNoIG1hdGNoZXM7CiAgICB3aGlsZShyZWdleF9zZWFyY2goc3RyLCBtYXRjaGVzLCBwYXR0ZXJuKSkKICAgIHsKICAgICAgICBzdHJpbmcgc2xpY3puaWs9bWF0Y2hlc1swXTsKICAgICAgICBzbGljem5paz1zbGljem5pay5zdWJzdHIoMixzbGljem5pay5zaXplKCktMSk7CiAgICAgICAgaW50IGxpY3puaWs9c3RvaShzbGljem5payk7CiAgICAgICAgc3RyaW5nIGxldHRlclRlbXA9bWF0Y2hlc1swXTsKICAgICAgICBsZXR0ZXJUZW1wPWxldHRlclRlbXAuc3Vic3RyKDAsMSk7CiAgICAgICAgc3RyaW5nIHBhdHRlcm5UZW1wOwogICAgICAgIGZvciAoaW50IGk9MDsgaTxsaWN6bmlrOyBpKyspCiAgICAgICAgewogICAgICAgICAgICBwYXR0ZXJuVGVtcCs9bGV0dGVyVGVtcDsKICAgICAgICB9CiAgICAgICAgc3RyPXJlZ2V4X3JlcGxhY2Uoc3RyLHBhdHRlcm4sIHBhdHRlcm5UZW1wLCByZWdleF9jb25zdGFudHM6OmZvcm1hdF9maXJzdF9vbmx5KTsKICAgIH0KICAgIHJldHVybiBzdHI7Cn0KCnN0cmluZyBEZWNvbXBfV29yZFJlcGxhY2VNYXRjaGVzKHN0cmluZyBzdHIsIHJlZ2V4IHBhdHRlcm4pCnsKICAgIHNtYXRjaCBtYXRjaGVzOwogICAgd2hpbGUocmVnZXhfc2VhcmNoKHN0ciwgbWF0Y2hlcywgcGF0dGVybikpCiAgICB7CiAgICAgICAgc3RyaW5nIHRlbXA9bWF0Y2hlc1swXTsKCiAgICAgICAgc2l6ZV90IHBvc2l0aW9uPXRlbXAuZmluZCgiLyIpOwogICAgICAgIHN0cmluZyB0ZW1wV29yZD10ZW1wLnN1YnN0cigwLHBvc2l0aW9uKTsKICAgICAgICBpbnQgbGljem5paz1zdG9pKHRlbXAuc3Vic3RyKHBvc2l0aW9uKzEsdGVtcC5zaXplKCktcG9zaXRpb24pKTsKICAgICAgICBzdHJpbmcgcGF0dGVyblRlbXA7CiAgICAgICAgZm9yIChpbnQgaT0wOyBpPGxpY3puaWs7IGkrKykKICAgICAgICB7CiAgICAgICAgICAgIHBhdHRlcm5UZW1wKz10ZW1wV29yZCsiICI7CiAgICAgICAgfQogICAgICAgIHBhdHRlcm5UZW1wLnBvcF9iYWNrKCk7CiAgICAgICAgc3RyPXJlZ2V4X3JlcGxhY2Uoc3RyLHBhdHRlcm4sIHBhdHRlcm5UZW1wLCByZWdleF9jb25zdGFudHM6OmZvcm1hdF9maXJzdF9vbmx5KTsKICAgIH0KICAgIHJldHVybiBzdHI7Cn0KCmludCBtYWluKCkKewogICAgc3RyaW5nIGNob29zZTsKICAgIGdldGxpbmUoY2luLGNob29zZSk7CiAgICBpZiAoY2hvb3NlPT0iS09NUFJFU0pBIikKICAgIHsKICAgICAgICBzdHJpbmcgbGluZSxzdHI7CiAgICAgICAgd2hpbGUgKGdldGxpbmUoY2luLGxpbmUpICYmIGxpbmUhPSIiKQogICAgICAgIHsKICAgICAgICAgICAgc3RyKz1saW5lOwogICAgICAgIH0KICAgICAgICByZWdleCBsZXR0ZXJfcGF0dGVybigiKFthLXpdKVxcMXszLH0iKTsKICAgICAgICBzdHI9TGV0dGVyUmVwbGFjZU1hdGNoZXMoc3RyLGxldHRlcl9wYXR0ZXJuKTsKICAgICAgICByZWdleCB3b3JkX3BhdHRlcm4gKCIoW2Etel0pKFxcc1xcMSl7Mix9fChbXFwqYS16MC05XXsyLH0pKFxcc1xcMyl7MSx9Iik7CiAgICAgICAgc3RyPVdvcmRSZXBsYWNlTWF0Y2hlcyhzdHIsd29yZF9wYXR0ZXJuKTsKICAgICAgICBjb3V0PDxzdHI8PGVuZGw7CiAgICB9CiAgICBlbHNlIGlmIChjaG9vc2U9PSJERUtPTVBSRVNKQSIpCiAgICB7CiAgICAgICAgc3RyaW5nIGxpbmUsc3RyOwogICAgICAgIHdoaWxlIChnZXRsaW5lKGNpbixsaW5lKSAmJiBsaW5lIT0iIikKICAgICAgICB7CiAgICAgICAgICAgIHN0cis9bGluZTsKICAgICAgICB9CiAgICAgICAgcmVnZXggbGV0dGVyX3BhdHRlcm4oIlthLXpdezF9XFwqXFxkKyIpOwogICAgICAgIHN0cj1EZWNvbXBfTGV0dGVyUmVwbGFjZU1hdGNoZXMoc3RyLGxldHRlcl9wYXR0ZXJuKTsKICAgICAgICByZWdleCB3b3JkX3BhdHRlcm4gKCJcXHcrXFwvXFxkKyIpOwogICAgICAgIHN0cj1EZWNvbXBfV29yZFJlcGxhY2VNYXRjaGVzKHN0cix3b3JkX3BhdHRlcm4pOwogICAgICAgIGNvdXQ8PHN0cjw8ZW5kbDsKICAgIH0KICAgIHJldHVybiAwOwp9Cg==