output_description: Print the AtCoDeer's maximum possible score.
  
  * * *
input_description: The input is given from Standard Input in the following format:
  
      
      
      s
attempt: # a
  """
  import math
  a, b = map(str, input().split())
  j = int(a + b)
  if math.sqrt(j).is_integer():
      print("Yes")
  else:
      print("No")
  """
  
  # b
  """
  ans = ["Positive","Negative"]
  a, b = map(int, input().split())
  if 0 < a:
      print("Positive")
  elif b >= 0:
      print("Zero")
  else:
      print(ans[(b-a)%2-1])
  """
  
  # C
  """
  import itertools
  n = int(input())
  MARCH = ["M", "A", "R", "C", "H"]
  march = [0 for _ in range(5)]
  for i in range(n):
      s = input()
      if s[0] in MARCH:
          march[MARCH.index(s[0])] += 1
  num = list(range(5))
  a = list(itertools.combinations(num, 3))
  ans = 0
  for i in a:
      bf = 1
      for k in i:
          bf *= march[k]
      ans += bf
  print(ans)
  """
  
  # D
  """
  n = int(input())
  D = [list(map(int, input().split())) for _ in range(n)]
  q = int(input())
  p = [int(input()) for _ in range(q)]
  ans = [[0 for i in range(n)] for _ in range(n)]
  tate = [[[]]]
  for i in range(n):
      for j in range(n):
  
  for _ in p:
      print(ans[p])
  
  """
  # E
  """
  s = input()
  bf = s[0]
  ans = 0
  for i in range(1,len(s)):
      if bf != s[i]:
          ans += 1
          bf = s[i]
  print(ans)
  """
  
  # F
  """
  n = int(input())
  ta = [list(map(int, input().split())) for _ in range(n)]
  ans = ta[0]
  for i in ta:
      if ans[0] <= i[0] and ans[1] <= i[1]:
          ans = i
      else:
          a = ((ans[0] - 1) // i[0]) + 1
          b = ((ans[1] - 1) // i[1]) + 1
          ab = max(a,b)
          ans = [i[0] * ab, i[1] * ab]
  print(ans[0]+ans[1])
  """
  
  # G
  s = input()
  ans = 0
  for i in range(1, len(s)):
      if i % 2 == 0:
          if s[i] != "p":
              ans += 1
      else:
          if s[i] != "g":
              ans -= 1
  print(ans)
  
problem_description: Statement
  
  AtCoDeer the deer and his friend TopCoDeer is playing a game. The game
  consists of N turns. In each turn, each player plays one of the two _gestures_
  , _Rock_ and _Paper_ , as in Rock-paper-scissors, under the following
  condition:
  
  (※) After each turn, (the number of times the player has played Paper)≦(the
  number of times the player has played Rock).
  
  Each player's score is calculated by (the number of turns where the player
  wins) - (the number of turns where the player loses), where the outcome of
  each turn is determined by the rules of Rock-paper-scissors.
  
  _(For those who are not familiar with Rock-paper-scissors: If one player plays
  Rock and the other plays Paper, the latter player will win and the former
  player will lose. If both players play the same gesture, the round is a tie
  and neither player will win nor lose.)_
  
  With his supernatural power, AtCoDeer was able to foresee the gesture that
  TopCoDeer will play in each of the N turns, before the game starts. Plan
  AtCoDeer's gesture in each turn to maximize AtCoDeer's score.
  
  The gesture that TopCoDeer will play in each turn is given by a string s. If
  the i-th (1≦i≦N) character in s is `g`, TopCoDeer will play Rock in the i-th
  turn. Similarly, if the i-th (1≦i≦N) character of s in `p`, TopCoDeer will
  play Paper in the i-th turn.
samples: [{"input": "gpg", "output": "0\n    \n\nPlaying the same gesture as the opponent in each turn results in the score of\n0, which is the maximum possible score.\n\n* * *"}, {"input": "ggppgggpgg", "output": "2\n    \n\nFor example, consider playing gestures in the following order: Rock, Paper,\nRock, Paper, Rock, Rock, Paper, Paper, Rock, Paper. This strategy earns three\nvictories and suffers one defeat, resulting in the score of 2, which is the\nmaximum possible score."}]