#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=