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.OutputStreamWriter;
import java.io.BufferedWriter;
import java.io.PrintStream;
import java.io.BufferedReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.io.Writer;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.util.InputMismatchException;
import java.util.StringTokenizer;
import java.math.BigInteger;
import java.io.InputStream;

/**
 * Built using CHelper plug-in
 * Actual solution is at the top
 * @author Ankit Srivastava
 */
public class Main {
    public static void main(String[] args) {
        InputStream inputStream = System.in;
        OutputStream outputStream = System.out;
        InReader in = new InReader(inputStream);
        OutWriter out = new OutWriter(outputStream);
        TaskB solver = new TaskB();
        solver.solve(1, in, out);
        out.close();
    }
}

class TaskB {
    public void solve(int testNumber, InReader in, OutWriter out) {
        int n = in.readInt();
        int[] arr = IOUtils.readIntArray (in,n);
        long ans = 0;
        int cnt[] = new int[40];
        for(int a:arr) {
            cnt[Integer.bitCount(a)]++;
        }
        for(long c:cnt) {
            if (c>=2) ans += c*(c-1)/2;
        }
        out.printLine(ans);
    }
}

class InReader {

    private InputStream stream;
    private byte[] buf = new byte[1024];
    private int curChar;
    private int numChars;

    public InReader (InputStream stream) {
        this.stream = stream;
    }

    public int read() {
        if (numChars == -1)
            throw new InputMismatchException();
        if (curChar >= numChars) {
            curChar = 0;
            try {
                numChars = stream.read(buf);
            } catch (IOException e) {
                throw new InputMismatchException();
            }
            if (numChars <= 0)
                return -1;
        }
        return buf[curChar++];
    }

    public int readInt() {
        int c = read();
        while (isSpaceChar(c))
            c = read();
        int sgn = 1;
        if (c == '-') {
            sgn = -1;
            c = read();
        }
        int res = 0;
        do {
            if (c < '0' || c > '9')
                throw new InputMismatchException();
            res *= 10;
            res += c - '0';
            c = read();
        } while (!isSpaceChar(c));
        return res * sgn;
    }

    public static boolean isSpaceChar(int c) {
        return c == ' ' || c == '\n' || c == '\r' || c == '\t' || c == -1;
    }

    }

class OutWriter {
    private final PrintWriter writer;

    public OutWriter (OutputStream outputStream) {
        writer = new PrintWriter (new BufferedWriter (new OutputStreamWriter (outputStream)));
    }

    public OutWriter (Writer writer) {
        this.writer = new PrintWriter (writer);
    }

    public void print (Object... objects) {
        for (int i = 0;i < objects.length;i++) {
            if (i != 0)
                writer.print (' ');
            writer.print (objects[i]);
        }
    }

    public void printLine (Object... objects) {
        print (objects);
        writer.println ();
    }

    public void close () {
        writer.close ();
    }

}

class IOUtils {

    public static int[] readIntArray (InReader in, int size) {
        int[] array = new int[size];
        for (int i = 0;i < size;i++)
            array[i] = in.readInt ();
        return array;
    }


    }
