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.io.*;
import java.util.ArrayList;
import java.util.List;



public class Main {
    public static void main(String[] args) throws Exception{
    
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    PrintWriter pw = new PrintWriter(System.out, true); 
    int n=Integer.parseInt(br.readLine());

    int arr[]=new int[n];
    StreamTokenizer st = new StreamTokenizer(br);

    ArrayList<Integer> fun = new ArrayList<Integer>();
    ArrayList<Integer> occr = new ArrayList<Integer>();
    int midx=0; 
    for(int i=0;i<n;i++)
    {   st.nextToken();
        arr[i]=(int)st.nval;
       int val=arr[i];
       int funtemp=0;
       while(val!=0)
       {  if(val%2==0)
           val=val/2;
          else
          {
              funtemp++;
              val=val/2;
          }
       }

       if(!fun.contains(funtemp))
       {   midx++;
           fun.add(funtemp);
           occr.add(1);
         
       }
       else
       {  //   System.out.println(funtemp+" "+arr[i]+" "+occr.size());
           int idx=fun.indexOf(funtemp);
           int old= occr.get(idx); 
           
           occr.set(idx,old+1);
       }
    }
  
    long result=0;

    for(int i=0;i<midx;i++)
   {   //System.out.println(occr.get(i));
       if(occr.get(i)!=1)
       {
           int temp=occr.get(i);
           long fact=0;
           for(int j=1;j<temp;j++)
               fact+=j;
           result+=fact;
       }
   }
    
  
    pw.println(result);
   }

}