You are given n integers a1, a2, ..., an. Find the number of pairs of indexes i, j (i < j) that ai + aj is a power of 2 (i. e. some integer x exists so that ai + aj = 2x).
Input
The first line contains the single positive integer n (1 ≤ n ≤ 105) — the number of integers.
The second line contains n positive integers a1, a2, ..., an (1 ≤ ai ≤ 109).
Output
Print the number of pairs of indexes i, j (i < j) that ai + aj is a power of 2.
Examples
input
4
7 3 2 1
output
2
input
3
1 1 1
output
3
Note
In the first example the following pairs of indexes include in answer: (1, 4) and (2, 4).
Input
The first line contains the single positive integer n (1 ≤ n ≤ 105) — the number of integers.
The second line contains n positive integers a1, a2, ..., an (1 ≤ ai ≤ 109).
Output
Print the number of pairs of indexes i, j (i < j) that ai + aj is a power of 2.
Examples
input
4
7 3 2 1
output
2
input
3
1 1 1
output
3
Note
In the first example the following pairs of indexes include in answer: (1, 4) and (2, 4).
In the second example all pairs of indexes (i, j) (where i < j) include in answer.
题意就是求一些数中两个数之和为2的幂的对数有多少。
如果直接枚举的话必然超时。
由于int范围内2的幂的个数很少,可以考虑对于一个数 i ,看所有2的幂-i 的数的个数,这些数就是能够与 i 组成2的幂的数,
同时这不可能出现重复或是遗漏,因为两个数之和如果等于2的幂,那么必然在枚举后一个数时将其记录。
#include <iostream>
#include <cstdio>
#include <map>
#include <set>
#include <vector>
#include <queue>
#include <stack>
#include <cmath>
#include <algorithm>
#include <cstring>
#include <string>
using namespace std;
#define INF 0x3f3f3f3f
typedef long long LL;
map<LL,LL> s;
int main()
{
int n;
LL ans=0,t;
scanf("%d",&n);
while(n--){
scanf("%I64d",&t);
for(int i=0;i<32;i++){
ans+=s[(1<<i)-t];
}
s[t]++;
}
printf("%I64d\n",ans);
return 0;
}