من خودم به جواب نرسيدم، ولي يکي تو تاپيک الگوريتم جوابشا گذاشت، اگه رو جوابشم يکم تحليل کنيم خوبه .....
/*
ID: amir.ju1
LANG: C++
TASK: beads
*/
//Author: Amir Joudaki
#include <iostream>
using namespace std;
int Break_R(char *beads, int k, int len) {
    char c = beads[k];
    int i = 0;
    while(beads[k]=='w' && i<len) {
        k = k < len-1 ? k+1 : 0;
        i++;
    }
    c = beads[k];
    while((beads[k]==c || beads[k]=='w') && i < len) {
        i++;
        k = k < len-1 ? k+1 : 0;
    }
    return i;
}
int Break_L(char *beads, int k, int len) {
    k = k > 0 ? k-1 : len-1;
    char c = beads[k];
    int i = 0;
    while(beads[k]=='w' && i<len) {    
        k = k > 0 ? k-1 : len-1;
        i++;
    }
    c = beads[k];
    while((beads[k]==c || beads[k]=='w') && i < len) {
        i++;
        k = k > 0 ? k-1 : len-1;
    }
    return i;
}
int Break(char* beads, int k, int len) {
    int r = Break_R(beads, k, len),
        l = Break_L(beads, k, len);
    if( r + l >= len )
        return len;
    else
        return r + l;
}
int main() {
    FILE *fin, *fout;
    fin = fopen("beads.in", "r");
    fout = fopen("beads.out", "w");
    int N, // number of beads
        collectedBeads,
        max = 0;
    fscanf(fin, "%d", &N);
    char* beads = new char[N+1]; // the beads
    fscanf(fin, "%s", beads);
    for(int i=0; i<N; i++) {
        collectedBeads = Break(beads, i, strlen(beads));
        max = max > collectedBeads ? max : collectedBeads;
    }
    fprintf(fout, "%d\n", max);
    return 0;
}