import std.stdio;
import std.conv, std.array, std.algorithm, std.string;
import std.math, std.random, std.range, std.datetime;
import std.bigint;

void main(){
	string s = readln.chomp;
	int n = s.length.to!int;
	
	int[] xs;
	foreach(i; 0 .. n + 1) xs ~= -1000000;
	
	xs[0] = 0;
	
	int q, next;
	foreach(i; 0 .. n){
		foreach(k; 0 .. n){
			
			if(k > 0) q = next;
			
			if(s[i] == 'g'){ // 相手はg
				if(k > 0){
					next = max(
							xs[k+1] + 1, // pを出してkを減らした
							xs[k-1] + 0// gを出してkをかせいだ
							);
					}
				else next = xs[k+1] + 1; // pを出した場合しかない
				}
			else{ // 相手はp
				if(k > 0){
					next = max(
							xs[k+1] + 0, // pを出してkを減らした
							xs[k-1] - 1 // gを出してkをかせいだ
							);
					}
				else next = xs[k+1]; // pを出した場合しかない
				}
			
			if(k > 0) xs[k-1] = q;
			}
		
		debug writeln(i, ": ", xs);
		
		}
	
	xs[n-1] = next;
	
	int ans = -1000000;
	foreach(i; 0 .. n) if(ans < xs[i]) ans = xs[i];
	
	ans.writeln;
	
	}
	

/*


xs[i][k] は，i回目までにgをpよりk回多く出しているときの、
i回目までに獲得している得点の最大値
※ k >= 0 でなければならない

if(s[i] == 'g'){ // 相手はg
	if(k > 0){
		xs[i][k] = max(
				xs[i-1][k+1] + 1, // pを出してkを減らした
				xs[i-1][k-1] // gを出してkをかせいだ
				);
		}
	else{
		xs[i][k] = xs[i-1][k+1] + 1; // pを出した場合しかない
		}
	}
else{ // 相手はp
	if(k > 0){
		xs[i][k] = max(
				xs[i-1][k+1], // pを出してkを減らした
				xs[i-1][k-1] // gを出してkをかせいだ
				);
		}
	else{
		xs[i][k] = xs[i-1][k+1]; // pを出した場合しかない
		}
	}




*/