output_description: Print the minimum possible value of N when the partition satisfies the
  condition.
  
  * * *
input_description: Input is given from Standard Input in the following format:
  
      
      
      s
attempt: from collections import defaultdict
  import sys, heapq, bisect, math, itertools, string, queue, datetime
  
  sys.setrecursionlimit(10**8)
  INF = float("inf")
  mod = 10**9 + 7
  eps = 10**-7
  AtoZ = [chr(i) for i in range(65, 65 + 26)]
  atoz = [chr(i) for i in range(97, 97 + 26)]
  
  
  def inpl():
      return list(map(int, input().split()))
  
  
  def inpl_s():
      return list(input().split())
  
  
  S = input()
  num = [0] * 26
  
  for s in S:
      num[ord(s) - 97] += 1
  
  tmp = 0
  for n in num:
      if n % 2 == 1:
          tmp += 1
  
  print(max(tmp, 1))
  
problem_description: Statement
  
  We have a string s consisting of lowercase English letters. Snuke is
  partitioning s into some number of non-empty substrings. Let the subtrings
  obtained be s_1, s_2, ..., s_N from left to right. (Here, s = s_1 + s_2 + ...
  + s_N holds.) Snuke wants to satisfy the following condition:
  
    * For each i (1 \leq i \leq N), it is possible to permute the characters in s_i and obtain a palindrome.
  
  Find the minimum possible value of N when the partition satisfies the
  condition.
samples: [{"input": "aabxyyzz", "output": "2\n    \n\nThe solution is to partition s as `aabxyyzz` = `aab` \\+ `xyyzz`. Here, `aab`\ncan be permuted to form a palindrome `aba`, and `xyyzz` can be permuted to\nform a palindrome `zyxyz`.\n\n* * *"}, {"input": "byebye", "output": "1\n    \n\n`byebye` can be permuted to form a palindrome `byeeyb`.\n\n* * *"}, {"input": "abcdefghijklmnopqrstuvwxyz", "output": "26\n    \n\n* * *"}, {"input": "abcabcxabcx", "output": "3\n    \n\nThe solution is to partition s as `abcabcxabcx` = `a` \\+ `b` \\+ `cabcxabcx`."}]