Dima got into number sequences. Now he's got sequence a1, a2, ..., an, consisting of n positive integers. Also, Dima has got a function f(x), which can be defined with the following recurrence:

  * f(0) = 0; 
  * f(2·x) = f(x); 
  * f(2·x + 1) = f(x) + 1. 



Dima wonders, how many pairs of indexes (i, j) (1 ≤ i < j ≤ n) are there, such that f(ai) = f(aj). Help him, count the number of such pairs. 

Input

The first line contains integer n (1 ≤ n ≤ 105). The second line contains n positive integers a1, a2, ..., an (1 ≤ ai ≤ 109).

The numbers in the lines are separated by single spaces.

Output

In a single line print the answer to the problem.

Please, don't use the %lld specifier to read or write 64-bit integers in C++. It is preferred to use the cin, cout streams or the %I64d specifier.

Examples

Input

3
1 2 4


Output

3


Input

3
5 3 1


Output

1

Note

In the first sample any pair (i, j) will do, so the answer is 3.

In the second sample only pair (1, 2) will do.
import java.util.Arrays;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Scanner;
import java.util.Set;



public class pp {

	
	public static HashMap<Integer,Long>h2 = new HashMap<Integer, Long>();
	public static HashMap<Integer, Integer>h1 = new HashMap<Integer, Integer>();
	
	
	public static void main(String[] args)
	{
		int n=0,x;
		Long answer=(long) 0;
		Scanner s = new Scanner(System.in);
		n=s.nextInt();
		//n=3;
		Integer[] a = new Integer[n];
		h1.put(0, 0);
		h1.put(1, 1);
		
		for(int i=0;i<n;i++)
		{
			
			a[i]=s.nextInt();
			if(a[i]==0)
				{if(h2.containsKey(0))
				{long count=h2.get(0);
					h2.put(0,count+1);
				}
				else
					h2.put(0, (long) 1);
				}
			else if(a[i]==1)
			{
					if(h2.containsKey(1))
					{long count=h2.get(1);
						h2.put(1,count+1);
					}
					else
						h2.put(1, (long) 1);
			}
			
			else
			{
				int vl = calc(a[i]);
				h1.put(a[i],vl);
			
			Long count = null;
			if(h2.containsKey(vl))
					{count=h2.get(vl);
					h2.put(vl,count+1);
					}
			else
				h2.put(vl, (long) 1);
			}
			
			
		}
		
		Set<Entry<Integer, Long>> se = h2.entrySet();
		
		Iterator iter = se.iterator();
		while(iter.hasNext()) {
			Map.Entry me = (Map.Entry)iter.next();
			
			Long vv= (Long) me.getValue();
			answer+= ((vv-1)*vv)/2;
			//System.out.println(vv+" "+me.getKey());
			} 
		System.out.println(answer);
				
		
	}
	
	public static int calc(int x)
	{
		
		int val;
		if(x%2==0)
			if(h1.containsKey(x/2))
				{
					int vl=h1.get(x/2);
					h1.put(x, vl);
					return vl;
				}
			else
				{int val1 = calc(x/2);
				h1.put(x, val1);
				
				 return val1;
				}
		else
			{
			if(h1.containsKey((x-1)/2))
			{
				int vl=h1.get((x-1)/2)+1;
				h1.put(x, vl);
				return vl;
			}
			else
			{
				int val1 = calc((x-1)/2)+1;
				h1.put(x, val1);
				return val1;
			}
			}
		
	}
	
}
