func_code_string: #include <bits/stdc++.h>   using namespace std;   template <class T>   const T& max(const T& a, const T& b, const T& c) {     return max(a, max(b, c));   }   template <class T>   const T& min(const T& a, const T& b, const T& c) {     return min(a, min(b, c));   }   struct sp {     bool operator()(const pair<string, int>& a, const pair<string, int>& b) {       if (a.second != b.second) {         return (a.second > b.second);       }       return (a.first < b.first);     }   };   long long stoi(string& str) {     istringstream second(str);     long long i;     second >> i;     return i;   }   string itos(long long i) {     stringstream second;     second << i;     return second.str();   }   long long gcd(long long a, long long b) {     if (b == 0) return a;     return gcd(b, a % b);   }   long long lcm(long long a, long long b) { return (a * b) / gcd(a, b); }   long long poww(long long a, long long b) {     long long res = 1;     for (int i = 1; i <= b; i++) res *= a;     return res;   }   long long sumOfDigs(string s) {     long long sum = 0;     for (int i = 0; i < s.length(); i++) sum += s[i] -  0 ;     return sum;   }   long long mod = 1000000007;   using namespace std;   long long a[100001];   int fn(int x) {     if (x == 0)       return 0;     else if (x & 1) {       return (fn(x >> 1) + 1);     } else       return fn(x >> 1);   }   int main() {     ios_base::sync_with_stdio(0);     cin.tie(0);     ;     int n;     cin >> n;     int x;     for (int i = 1; i <= n; i++) {       cin >> x;       a[fn(x)]++;     }     long long s = 0;     for (int i = 0; i < 100001; i++) {       if (a[i] > 1) {         s += (a[i] * (a[i] - 1)) / 2;       }     }     cout << s << endl;     return 0;   }   