#pragma GCC optimize ("Ofast")
#include<bits/stdc++.h>
using namespace std;
#define main dummy_main
int main( ) {
return 0 ;
}
#undef main
char res[ 100001 ] ;
int cnt[ 100001 ] ;
class Solution{
public :
string removeDuplicates( string s, int k) {
int i;
int sz = 0 ;
int N = s.size ( ) ;
for ( i= ( 0 ) ; i< ( N) ; i++ ) {
if ( sz== 0 || res[ sz- 1 ] ! = s[ i] ) {
res[ sz] = s[ i] ;
cnt[ sz] = 1 ;
sz++ ;
}
else {
res[ sz] = s[ i] ;
cnt[ sz] = cnt[ sz- 1 ] + 1 ;
sz++ ;
if ( cnt[ sz- 1 ] == k) {
sz - = k;
}
}
}
res[ sz] = '\0 ' ;
return ( string) res;
}
}
;
// cLay varsion 20191006-1
// --- original code ---
// #define main dummy_main
// {}
// #undef main
//
// char res[100001];
// int cnt[100001];
//
// class Solution {
// public:
// string removeDuplicates(string s, int k) {
// int sz = 0, N = s.size();
// rep(i,N){
// if(sz==0 || res[sz-1] != s[i]){
// res[sz] = s[i];
// cnt[sz] = 1;
// sz++;
// } else {
// res[sz] = s[i];
// cnt[sz] = cnt[sz-1] + 1;
// sz++;
// if(cnt[sz-1] == k) sz -= k;
// }
// }
// res[sz] = '\0';
// return (string)res;
// }
// };
I3ByYWdtYSBHQ0Mgb3B0aW1pemUgKCJPZmFzdCIpCiNpbmNsdWRlPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiNkZWZpbmUgbWFpbiBkdW1teV9tYWluCmludCBtYWluKCl7CiAgcmV0dXJuIDA7Cn0KI3VuZGVmIG1haW4KY2hhciByZXNbMTAwMDAxXTsKaW50IGNudFsxMDAwMDFdOwpjbGFzcyBTb2x1dGlvbnsKICBwdWJsaWM6CiAgc3RyaW5nIHJlbW92ZUR1cGxpY2F0ZXMoc3RyaW5nIHMsIGludCBrKXsKICAgIGludCBpOwogICAgaW50IHN6ID0gMDsKICAgIGludCBOID0gcy5zaXplKCk7CiAgICBmb3IoaT0oMCk7aTwoTik7aSsrKXsKICAgICAgaWYoc3o9PTAgfHwgcmVzW3N6LTFdICE9IHNbaV0pewogICAgICAgIHJlc1tzel0gPSBzW2ldOwogICAgICAgIGNudFtzel0gPSAxOwogICAgICAgIHN6Kys7CiAgICAgIH0KICAgICAgZWxzZXsKICAgICAgICByZXNbc3pdID0gc1tpXTsKICAgICAgICBjbnRbc3pdID0gY250W3N6LTFdICsgMTsKICAgICAgICBzeisrOwogICAgICAgIGlmKGNudFtzei0xXSA9PSBrKXsKICAgICAgICAgIHN6IC09IGs7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICByZXNbc3pdID0gJ1wwJzsKICAgIHJldHVybiAoc3RyaW5nKXJlczsKICB9Cn0KOwovLyBjTGF5IHZhcnNpb24gMjAxOTEwMDYtMQoKLy8gLS0tIG9yaWdpbmFsIGNvZGUgLS0tCi8vICNkZWZpbmUgbWFpbiBkdW1teV9tYWluCi8vIHt9Ci8vICN1bmRlZiBtYWluCi8vIAovLyBjaGFyIHJlc1sxMDAwMDFdOwovLyBpbnQgY250WzEwMDAwMV07Ci8vIAovLyBjbGFzcyBTb2x1dGlvbiB7Ci8vIHB1YmxpYzoKLy8gICBzdHJpbmcgcmVtb3ZlRHVwbGljYXRlcyhzdHJpbmcgcywgaW50IGspIHsKLy8gICAgIGludCBzeiA9IDAsIE4gPSBzLnNpemUoKTsKLy8gICAgIHJlcChpLE4pewovLyAgICAgICBpZihzej09MCB8fCByZXNbc3otMV0gIT0gc1tpXSl7Ci8vICAgICAgICAgcmVzW3N6XSA9IHNbaV07Ci8vICAgICAgICAgY250W3N6XSA9IDE7Ci8vICAgICAgICAgc3orKzsKLy8gICAgICAgfSBlbHNlIHsKLy8gICAgICAgICByZXNbc3pdID0gc1tpXTsKLy8gICAgICAgICBjbnRbc3pdID0gY250W3N6LTFdICsgMTsKLy8gICAgICAgICBzeisrOwovLyAgICAgICAgIGlmKGNudFtzei0xXSA9PSBrKSBzeiAtPSBrOwovLyAgICAgICB9Ci8vICAgICB9Ci8vICAgICByZXNbc3pdID0gJ1wwJzsKLy8gICAgIHJldHVybiAoc3RyaW5nKXJlczsKLy8gICB9Ci8vIH07Cg==