#include <iostream>
class Buckets
{
private:
int size;
char * buckets;
int calls_to_swap{};
int calls_to_color{};
public:
Buckets(int N) : size{N}, buckets{new char[N]}
{
for (int i{}; i<N; i++)
std::cin >> buckets[i];
}
void swap(int i,int j)
{
calls_to_swap++;
std::swap(buckets[i],buckets[j]);
}
char color(int i)
{
calls_to_color++;
return buckets[i];
}
void calls()
{
std::cout << "Calls to color:\t" << calls_to_color << std::endl
<< "Calls to swap:\t" << calls_to_swap << std::endl;
}
void print()
{
for (int i{}; i<size;i++)
std::cout << buckets[i] << ' ';
std::cout << std::endl;
}
~Buckets(){ delete[] buckets;}
};
int main() {
int N;
std::cin >> N;
Buckets b{N};
std::cout << "input: ";
b.print();
int red{0}; // Элементы массива у которых индекс меньше гарантировано красные
int blue{N-1}; // Элементы массива у которых индекс больше гарантировано синие
int i{};
while (i<blue)
{
switch(b.color(i))
{
case 'r' : b.swap(red,i); red++; i++; break;
case 'w' : i++; break;
case 'b' : b.swap(blue,i); blue--; break;
}
}
std::cout << "output: ";
b.print();
b.calls();
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKY2xhc3MgQnVja2V0cwp7CiBwcml2YXRlOgogCWludCBzaXplOwogCWNoYXIgKiBidWNrZXRzOwogCWludCBjYWxsc190b19zd2Fwe307CiAJaW50IGNhbGxzX3RvX2NvbG9ye307CiBwdWJsaWM6IAkKIAlCdWNrZXRzKGludCBOKSA6IHNpemV7Tn0sIGJ1Y2tldHN7bmV3IGNoYXJbTl19CiAJewogCQlmb3IgKGludCBpe307IGk8TjsgaSsrKQogCQkJc3RkOjpjaW4gPj4gYnVja2V0c1tpXTsKIAl9CiAJCiAJdm9pZCBzd2FwKGludCBpLGludCBqKQogCXsKIAkJY2FsbHNfdG9fc3dhcCsrOyAJCQogCQlzdGQ6OnN3YXAoYnVja2V0c1tpXSxidWNrZXRzW2pdKTsKIAl9CiAJCiAJY2hhciBjb2xvcihpbnQgaSkKIAl7CiAJCWNhbGxzX3RvX2NvbG9yKys7CiAJCXJldHVybiBidWNrZXRzW2ldOwogCX0KIAkKIAl2b2lkIGNhbGxzKCkKIAl7CiAJCXN0ZDo6Y291dAk8PCAiQ2FsbHMgdG8gY29sb3I6XHQiCTw8IGNhbGxzX3RvX2NvbG9yCTw8IHN0ZDo6ZW5kbAogCQkJCQk8PCAiQ2FsbHMgdG8gc3dhcDpcdCIJPDwgY2FsbHNfdG9fc3dhcAk8PCBzdGQ6OmVuZGw7CiAJfQogCQogCXZvaWQgcHJpbnQoKQogCXsKIAkJZm9yIChpbnQgaXt9OyBpPHNpemU7aSsrKQogCQkJc3RkOjpjb3V0IDw8IGJ1Y2tldHNbaV0gPDwgJyAnOwogCQlzdGQ6OmNvdXQgPDwgc3RkOjplbmRsOwogCX0KIAkKIAl+QnVja2V0cygpeyBkZWxldGVbXSBidWNrZXRzO30KfTsKCgppbnQgbWFpbigpIHsKCQoJaW50IE47CglzdGQ6OmNpbiA+PiBOOwoJQnVja2V0cyBie059OwoJc3RkOjpjb3V0IDw8ICJpbnB1dDogIjsKCWIucHJpbnQoKTsKCQoJaW50IHJlZHswfTsJLy8g0K3Qu9C10LzQtdC90YLRiyDQvNCw0YHRgdC40LLQsCDRgyDQutC+0YLQvtGA0YvRhSDQuNC90LTQtdC60YEg0LzQtdC90YzRiNC1INCz0LDRgNCw0L3RgtC40YDQvtCy0LDQvdC+INC60YDQsNGB0L3Ri9C1CglpbnQgYmx1ZXtOLTF9OwkvLyDQrdC70LXQvNC10L3RgtGLINC80LDRgdGB0LjQstCwINGDINC60L7RgtC+0YDRi9GFINC40L3QtNC10LrRgSDQsdC+0LvRjNGI0LUg0LPQsNGA0LDQvdGC0LjRgNC+0LLQsNC90L4g0YHQuNC90LjQtQoJaW50IGl7fTsKCXdoaWxlIChpPGJsdWUpCgl7CgkJc3dpdGNoKGIuY29sb3IoaSkpCgkJewoJCQljYXNlICdyJyA6IGIuc3dhcChyZWQsaSk7IHJlZCsrOyBpKys7IGJyZWFrOwoJCQljYXNlICd3JyA6IGkrKzsgYnJlYWs7CgkJCWNhc2UgJ2InIDogYi5zd2FwKGJsdWUsaSk7IGJsdWUtLTsgYnJlYWs7CgkJfQoJfQoJc3RkOjpjb3V0IDw8ICJvdXRwdXQ6ICI7CQoJYi5wcmludCgpOwoJYi5jYWxscygpOwoJCglyZXR1cm4gMDsKfQ==