#include<bits/stdc++.h>
#define ll long long
#define pp push_back
#define endl '\n'
#define all(x) x.begin(),x.end()
#define ld long double
#define PI acos(-1)
#define ones(x) __builtin_popcountll(x)
//#define int ll
using namespace std;
void Drakon() {
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
#ifdef Clion
freopen("input.txt", "r", stdin), freopen("output.txt", "w", stdout);
#endif
}
unsigned long long inf = 1e10;
const double EPS = 1e-6;
const int MOD = 1000000007, N = 1e6 + 5, LOG = 25;
ll mul(const ll &a, const ll &b) {
return (a % MOD + MOD) * (b % MOD + MOD) % MOD;
}
ll add(const ll &a, const ll &b) {
return (a + b + 2 * MOD) % MOD;
}
ll pw(ll x, ll y) {
ll ret = 1;
while (y > 0) {
if (y % 2 == 0) {
x = mul(x, x);
y = y / 2;
} else {
ret = mul(ret, x);
y = y - 1;
}
}
return ret;
}
int n, freq[(1 << 20)], dp[20][(1 << 20)];
int slv(int bit, int subMask) {
if(bit == -1) {
return freq[subMask];
}
int &ret = dp[bit][subMask];
if(~ret)
return ret;
ret = slv(bit - 1, subMask);
if((1 << bit) & subMask) ret += slv(bit - 1, subMask ^ (1 << bit));
return ret;
}
void solve() {
cin >> n;
vector<int> vec(n);
for (int i = 0; i < n; ++i) {
cin >> vec[i];
freq[vec[i]] ++;
}
memset(dp, -1, sizeof dp);
ll ans = 0;
for (int i = 0; i < n; ++i) {
int subMask = ~vec[i];
subMask &= (1 << 20) - 1;
ans += slv(19, subMask);
}
cout << ans / 2 << endl;
}
signed main() {
Drakon();
int t = 1;
//cin >> t;
while (t--) {
solve();
}
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KCiNkZWZpbmUgbGwgbG9uZyBsb25nCiNkZWZpbmUgcHAgcHVzaF9iYWNrCiNkZWZpbmUgZW5kbCAnXG4nCiNkZWZpbmUgYWxsKHgpIHguYmVnaW4oKSx4LmVuZCgpCiNkZWZpbmUgbGQgbG9uZyBkb3VibGUKI2RlZmluZSBQSSBhY29zKC0xKQojZGVmaW5lIG9uZXMoeCkgX19idWlsdGluX3BvcGNvdW50bGwoeCkKLy8jZGVmaW5lIGludCBsbAoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnZvaWQgRHJha29uKCkgewogICAgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7CiAgICBjaW4udGllKG51bGxwdHIpOwogICAgY291dC50aWUobnVsbHB0cik7CiNpZmRlZiBDbGlvbgogICAgZnJlb3BlbigiaW5wdXQudHh0IiwgInIiLCBzdGRpbiksIGZyZW9wZW4oIm91dHB1dC50eHQiLCAidyIsIHN0ZG91dCk7CiNlbmRpZgp9Cgp1bnNpZ25lZCBsb25nIGxvbmcgaW5mID0gMWUxMDsKY29uc3QgZG91YmxlIEVQUyA9IDFlLTY7CmNvbnN0IGludCBNT0QgPSAxMDAwMDAwMDA3LCBOID0gMWU2ICsgNSwgTE9HID0gMjU7CgpsbCBtdWwoY29uc3QgbGwgJmEsIGNvbnN0IGxsICZiKSB7CiAgICByZXR1cm4gKGEgJSBNT0QgKyBNT0QpICogKGIgJSBNT0QgKyBNT0QpICUgTU9EOwp9CgpsbCBhZGQoY29uc3QgbGwgJmEsIGNvbnN0IGxsICZiKSB7CiAgICByZXR1cm4gKGEgKyBiICsgMiAqIE1PRCkgJSBNT0Q7Cn0KCmxsIHB3KGxsIHgsIGxsIHkpIHsKICAgIGxsIHJldCA9IDE7CiAgICB3aGlsZSAoeSA+IDApIHsKICAgICAgICBpZiAoeSAlIDIgPT0gMCkgewogICAgICAgICAgICB4ID0gbXVsKHgsIHgpOwogICAgICAgICAgICB5ID0geSAvIDI7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmV0ID0gbXVsKHJldCwgeCk7CiAgICAgICAgICAgIHkgPSB5IC0gMTsKICAgICAgICB9CiAgICB9CiAgICByZXR1cm4gcmV0Owp9CgppbnQgbiwgZnJlcVsoMSA8PCAyMCldLCBkcFsyMF1bKDEgPDwgMjApXTsKCmludCBzbHYoaW50IGJpdCwgaW50IHN1Yk1hc2spIHsKICAgIGlmKGJpdCA9PSAtMSkgewogICAgICAgIHJldHVybiBmcmVxW3N1Yk1hc2tdOwogICAgfQogICAgaW50ICZyZXQgPSBkcFtiaXRdW3N1Yk1hc2tdOwogICAgaWYofnJldCkKICAgICAgICByZXR1cm4gcmV0OwogICAgcmV0ID0gc2x2KGJpdCAtIDEsIHN1Yk1hc2spOwogICAgaWYoKDEgPDwgYml0KSAmIHN1Yk1hc2spIHJldCArPSBzbHYoYml0IC0gMSwgc3ViTWFzayBeICgxIDw8IGJpdCkpOwogICAgcmV0dXJuIHJldDsKfQoKdm9pZCBzb2x2ZSgpIHsKICAgIGNpbiA+PiBuOwogICAgdmVjdG9yPGludD4gdmVjKG4pOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyArK2kpIHsKICAgICAgICBjaW4gPj4gdmVjW2ldOwogICAgICAgIGZyZXFbdmVjW2ldXSArKzsKICAgIH0KCiAgICBtZW1zZXQoZHAsIC0xLCBzaXplb2YgZHApOwogICAgbGwgYW5zID0gMDsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgKytpKSB7CiAgICAgICAgaW50IHN1Yk1hc2sgPSB+dmVjW2ldOwogICAgICAgIHN1Yk1hc2sgJj0gKDEgPDwgMjApIC0gMTsKICAgICAgICBhbnMgKz0gc2x2KDE5LCBzdWJNYXNrKTsKICAgIH0KICAgIGNvdXQgPDwgYW5zIC8gMiA8PCBlbmRsOwp9CgpzaWduZWQgbWFpbigpIHsKICAgIERyYWtvbigpOwogICAgaW50IHQgPSAxOwogICAgLy9jaW4gPj4gdDsKICAgIHdoaWxlICh0LS0pIHsKICAgICAgICBzb2x2ZSgpOwogICAgfQp9