#include <stdio.h>
#include <string.h>
#include <ctype.h>
char* poly_rep(char* s, size_t N){
char* p, *i, *o, *t = s;
size_t k
, l
, n
= strlen(s
) + 1;
while(*s){
++s;
p = s + 1;
++p;
l = (size_t)(p - s);
if(! (l % 2)){
i = p - 1;
o = s;
while((s < i) && (*s == *i)){
++s;
--i;
}
if(s > i){
if((n + l + 1) >= N)
break;
k = (size_t)(o - t);
memmove(p
+ 1, o
, (n
- k
) * sizeof(char)); *p = ' ';
p += l + 1;
n += l + 1;
}
}
s = p;
}
return t;
}
int main(void){
char s[64] = "KOOK, wow [ABBA], bla 21LL12";
puts( poly_rep
(s
, sizeof(s
)- 1) ); return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdHJpbmcuaD4KI2luY2x1ZGUgPGN0eXBlLmg+CgoKY2hhciogcG9seV9yZXAoY2hhciogcywgc2l6ZV90IE4pewoJY2hhciogIHAsICppLCAqbywgKnQgPSBzOwoJc2l6ZV90IGssIGwsIG4gPSBzdHJsZW4ocykgKyAxOwoKCgl3aGlsZSgqcyl7CgkJd2hpbGUoKnMgJiYgISBpc2FsbnVtKCpzKSkKCQkJKytzOwoKCQlwID0gcyArIDE7CgkJd2hpbGUoaXNhbG51bSgqcCkpCgkJCSsrcDsKCQkKCQlsID0gKHNpemVfdCkocCAtIHMpOwoJCWlmKCEgKGwgJSAyKSl7CgoJCQlpID0gcCAtIDE7CgkJCW8gPSBzOwoJCQl3aGlsZSgocyA8IGkpICYmICgqcyA9PSAqaSkpewoJCQkJKytzOwoJCQkJLS1pOwoJCQl9CgoJCQlpZihzID4gaSl7CgkJCQlpZigobiArIGwgKyAxKSA+PSBOKQoJCQkJCWJyZWFrOwoKCQkJCWsgID0gKHNpemVfdCkobyAtIHQpOwoJCQkJbWVtbW92ZShwICsgMSwgbywgKG4gLSBrKSAqIHNpemVvZihjaGFyKSk7CgkJCQkqcCA9ICcgJzsKCQkJCXAgKz0gbCArIDE7CgkJCQluICs9IGwgKyAxOwoJCQl9CgkJfQoJCXMgPSBwOwoJfQoJcmV0dXJuIHQ7Cn0KCgppbnQgbWFpbih2b2lkKXsKCWNoYXIgc1s2NF0gPSAiS09PSywgd293IFtBQkJBXSwgYmxhIDIxTEwxMiI7CgoJcHV0cyhzKTsKCXB1dHMoIHBvbHlfcmVwKHMsIHNpemVvZihzKS0gMSkgKTsKCXJldHVybiAwOwp9