#include <cstdio>
#include <stack>
char S[1000001];
struct record_t {
int top, bottom, pos;
};
int main() {
std::stack<record_t> stack;
scanf("%*d %s", S);
int level = 0, pos = 1, answer = 0;
record_t record = {0,0,0};
stack.push(record);
for( char *s = S; *s; s++, pos++ ) {
if( *s == 'p' ) level++;
else level--;
record_t record = {level,level,pos};
while( not stack.empty() and level >= stack.top().top ) {
record.pos = stack.top().pos;
record.bottom = stack.top().bottom;
stack.pop();
}
while( not stack.empty() and level < stack.top().bottom ) {
stack.pop();
}
if( pos-record.pos > answer )
answer = pos-record.pos;
stack.push(record);
}
printf("%d\n", answer );
}
I2luY2x1ZGUgPGNzdGRpbz4KI2luY2x1ZGUgPHN0YWNrPgoKY2hhciBTWzEwMDAwMDFdOwoKc3RydWN0IHJlY29yZF90IHsKCWludCB0b3AsIGJvdHRvbSwgcG9zOwp9OwoKaW50IG1haW4oKSB7CglzdGQ6OnN0YWNrPHJlY29yZF90PiBzdGFjazsKCXNjYW5mKCIlKmQgJXMiLCBTKTsKCWludCBsZXZlbCA9IDAsIHBvcyA9IDEsIGFuc3dlciA9IDA7CglyZWNvcmRfdCByZWNvcmQgPSB7MCwwLDB9OwoJc3RhY2sucHVzaChyZWNvcmQpOwoJZm9yKCBjaGFyICpzID0gUzsgKnM7IHMrKywgcG9zKysgKSB7CgkJaWYoICpzID09ICdwJyApIGxldmVsKys7CgkJZWxzZSBsZXZlbC0tOwoKCQlyZWNvcmRfdCByZWNvcmQgPSB7bGV2ZWwsbGV2ZWwscG9zfTsKCgkJd2hpbGUoIG5vdCBzdGFjay5lbXB0eSgpIGFuZCBsZXZlbCA+PSBzdGFjay50b3AoKS50b3AgKSB7CgkJCXJlY29yZC5wb3MgPSBzdGFjay50b3AoKS5wb3M7CgkJCXJlY29yZC5ib3R0b20gPSBzdGFjay50b3AoKS5ib3R0b207CgkJCXN0YWNrLnBvcCgpOwoJCX0KCgkJd2hpbGUoIG5vdCBzdGFjay5lbXB0eSgpIGFuZCBsZXZlbCA8IHN0YWNrLnRvcCgpLmJvdHRvbSApIHsKCQkJc3RhY2sucG9wKCk7CgkJfQoKCQlpZiggcG9zLXJlY29yZC5wb3MgPiBhbnN3ZXIgKQoJCQlhbnN3ZXIgPSBwb3MtcmVjb3JkLnBvczsKCgkJc3RhY2sucHVzaChyZWNvcmQpOwoJfQoJcHJpbnRmKCIlZFxuIiwgYW5zd2VyICk7Cn0=