Problem:
Score : 300 points

Problem Statement

You are playing the following game with Joisino.

Initially, you have a blank sheet of paper.

Joisino announces a number. If that number is written on the sheet, erase the number from the sheet; if not, write the number on the sheet. This process is repeated N times.

Then, you are asked a question: How many numbers are written on the sheet now?

The numbers announced by Joisino are given as A_1, ... ,A_N in the order she announces them. How many numbers will be written on the sheet at the end of the game?

Constraints

1≤N≤100000

1≤A_i≤1000000000(=10^9)

All input values are integers.

Input

Input is given from Standard Input in the following format:

N
A_1
:
A_N

Output

Print how many numbers will be written on the sheet at the end of the game.

Sample Input 1

3
6
2
6

Sample Output 1

1

The game proceeds as follows:

6 is not written on the sheet, so write 6.

2 is not written on the sheet, so write 2.

6 is written on the sheet, so erase 6.

Thus, the sheet contains only 2 in the end. The answer is 1.

Sample Input 2

4
2
5
5
2

Sample Output 2

0

It is possible that no number is written on the sheet in the end.

Sample Input 3

6
12
22
16
22
18
12

Sample Output 3

2

Solution in C# (Mono 4.6.2.0) (judge verdict: Time Limit Exceeded)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace WriteandErase
{
    class Program
    {
        static void Main(string[] args)
        {
            int intCnt = int.Parse(Console.ReadLine());

            // 動的配列宣言
            List<int> intArray = new List<int>();

            for (int i = 0; i < intCnt; i++) {
                int intWK = int.Parse(Console.ReadLine());

                // 配列を走査
                int intIdx = intArray.IndexOf(intWK);
                if (intIdx == -1)
                {
                    // なかったら配列に追加
                    intArray.Add(intWK);
                }
                else
                {
                    // あれば配列の要素を0に変更
                    intArray[intIdx] = 0;
                }
            }

            int intSum = 0;

            // 0以外の値を数える
            //for (int j = 0; j < intArray.Count; j++) {
            //    if (intArray[j] != 0 )
            //    {
            //        intSum++;
            //    }
            //}

            //int intDistinctCount = (from x in intArray select x).Distinct().Count();




            //List<int> dataList = new List<int>() { 2, 1, 2, 1, 3 };
            //var duplicationList = dataList
            //    .GroupBy(i => i)
            //    .Where(g => g.Count() > 1)
            //    .Select(g => new { number = g.Key, duplicationCount = g.Count() - 1 })
            //    .ToList();

            //int intRet = intArray
            //    .Where(g => g != 0)
            //    .Count();

            //    intSum = intArray.Count - intRet;
            //Console.WriteLine(intSum);


            // 0以外の値でフィルタをし、その結果数を取得
            int intRet = intArray.Where(num => num != 0).Count();
            Console.WriteLine(intRet);

            // for debug
            return;
        }
    }
}