Problem:
A: アルファベットブロック

名川 若菜 (なかわ わかな) ちゃんは回文が大好きだ。なぜなら、自分の名前もまた回文であるからである。

わかなちゃんはアルファベットブロックがいくつか入っているセットを手に入れた。アルファベットブロックというのは、1 つのブロックにつき 1 文字の英小文字アルファベットが書いてあるブロックのことであり、ブロックの順序を入れ替えて組み合わせることで好きな文字列を作ることができる。わかなちゃんはこのセットで回文を作れないか考えているところだ。

アルファベットブロックのセットには、以下の 3 種類の操作が可能であり、操作のコストはそれぞれ 1 である。

アルファベットブロックを 1 つ追加する (記載されている文字は何であっても良い)

いま持っているアルファベットブロック 1 つを別のブロック 1 つ (記載されている文字は何であっても良い) に変える

いま持っているアルファベットブロックを 1 つ削除する

アルファベットブロックのセットに何度か操作を行うことによって、並び替えて回文にできるようなセットにしたい。そのような操作のコストの最小値はいくつになるだろうか？ わかなちゃんと一緒に考えてみよう。

Input

入力は、最初に持っているアルファベットブロックセットの情報を指す文字列 S の 1 行からなる。

S は英小文字のみで構成され、1 \leq |S| \leq 10^3 を満たす。

Output

回文を作成するためのコストの最小値を出力せよ。末尾の改行を忘れないこと。

Sample Input 1

hcpc

Sample Output 1

1

この場合コスト 1 で回文を作ることができるが、複数の方法が考えられる。例えば、’h’ のブロックを追加すると 'hcpch' が作れるため、コスト 1 で回文が作れる。また、'h’のブロックを削除すると 'cpc' が作れるため、この方法でもコスト 1 で回文が作れる。

Sample Input 2

ritscamp

Sample Output 2

4

Sample Input 3

nakawawakana

Sample Output 3

0

最初から回文を作ることができる場合、コストは 0 である。

Solution in C# (judge verdict: Wrong Answer)

using System;


class Program
{
static int[] separateChar;
static void Setting(string separateString)
{
 const char baseKey = 'a';
 for(int i = 0; i < separateString.Length;i++)
 {
  separateChar[(int)(separateString[i] - baseKey)]++;
 }
}
static int Count()
{
 int count = 0;
 for(int i = 0; i < 26;i++)
 {
  if(separateChar[i] % 2 == 1) count++;
 }
 if(count % 2 == 0 )
   return count / 2;
 else return (count - 1) / 2 + 1;
}
static void Main()
{
 separateChar = new int[26];
 string inputString = Console.ReadLine();
 Setting(inputString);
 Console.WriteLine(Count());
 return;
 }
}