假设长度为 aia_i 的连续的序列的第一项为 xix_i,那么因为易得 si=ai⋅[xi+(xi+ai−1)]2s_i=\cfrac{a_i\cdot[x_i+(x_i+a_i-1)]}{2} 。

因为题目要求 ∑i=1msi=0\sum_{i=1}^{m} s_i=0,所以可以得到 ∑i=1mai⋅[xi+(xi+ai−1)]2=0\sum_{i=1}^{m} \cfrac{a_i\cdot[x_i+(x_i+a_i-1)]}{2}=0。

即 ∑i=1mai⋅[2⋅xi+ai−1]2=0\sum_{i=1}^{m} \cfrac{a_i\cdot[2\cdot x_i+a_i-1]}{2}=0。

也就是 (∑i=1mai⋅(ai−1)2)+(∑i=1mai⋅xi)=0(\sum_{i=1}^{m} \cfrac{a_i\cdot(a_i-1)}{2})+(\sum_{i=1}^{m} a_i\cdot x_i)=0。

通过移项可以得到 ∑i=1mai⋅(ai−1)2=−∑i=1mai⋅xi\sum_{i=1}^{m} \cfrac{a_i\cdot(a_i-1)}{2}=-\sum_{i=1}^{m} a_i\cdot x_i,所以左边就是一个常数。

根据贝祖定理,当且仅当 gcd⁡(a1,a2,⋯ ,am)∣∑i=1mai⋅(ai−1)2\gcd(a_1,a_2,\cdots,a_{m})\mid \sum_{i=1}^m \cfrac{a_i\cdot(a_i-1)}{2} 时有解,通过移项可以得到 2∣∑i=1mai⋅(ai−1)gcd⁡(a1,a2,⋯ ,am)2\mid \sum_{i=1}^m \cfrac{a_i\cdot(a_i-1)}{\gcd(a_1,a_2,\cdots,a_{m})}。

假设 gcd⁡(a1,a2,⋯ ,am)=2t⋅(2k+1)\gcd(a_1,a_2,\cdots,a_{m})=2^t\cdot (2k+1) 其中 tt 尽可能大且 kk 为整数,那么设 ci=ai2tc_i=\cfrac{a_i}{2^t}。

将上式代入,得到 2∣∑i=1m2t⋅ci⋅(2t⋅ci−1)2t⋅(2k+1)2\mid \sum_{i=1}^m \cfrac{2^t\cdot c_i\cdot(2^t\cdot c_i-1)}{2^t\cdot(2k+1)},由于这个式子是由 ∑i=1mai⋅(ai−1)gcd⁡(a1,a2,⋯ ,am)\sum_{i=1}^m \cfrac{a_i\cdot(a_i-1)}{\gcd(a_1,a_2,\cdots,a_{m})} 变形来的,所以一定是一个整数。

因为一个偶数除以一个奇数并不影响奇偶性,所以 2k+12k+1 直接不看,即得到 2∣∑i=1mci⋅(2t⋅ci−1)2\mid \sum_{i=1}^m c_i\cdot(2^t\cdot c_i-1)。

当 t=0t=0 时,等式恒成立,否则需满足 2∣∑i=1mci2\mid \sum_{i=1}^m c_i。

因为 t=0t=0 只会发生在选择的 mm 个数中出现奇数,所以将奇数的情况单独讨论。

假设奇数有 nn 个,偶数有 mm 个,那么因为只要有奇数就可以,所以方案数为 (2a−1−1)⋅2b(2^{a-1}-1)\cdot 2^b。

对于 t≠0t\ne 0 的情况,假设有 aa 个 aia_i 没有多余的 22,bb 个有多余的 22,那么贡献为 2b⋅∑i=1⌊m/2⌋Ca2i2^b\cdot \sum_{i=1}^{\lfloor m/2\rfloor }C^{2i}_{a}。

因为 Cai=Ca−1i⋅Ca−1i−1C^i_a=C^i_{a-1}\cdot C_{a-1}^{i-1},所以贡献为 2b⋅∑i=1a−1Ca−1i2^b\cdot\sum_{i=1}^{a-1}C^i_{a-1},也就是 aa 个元素的非空子集数量 2b⋅(2a−1−1)2^b\cdot (2^{a-1}-1)。

#include<bits/stdc++.h>
#define int long long 
using namespace std;
const int N=2e5+5,mod=1e9+7;
int n,s[N],sum,ans;
int ksm(int a,int b){
    int ans=1;
    while(b){
        if(b&1){
            ans=ans*a%mod;
        }
        b>>=1;
        a=a*a%mod;
    }
    return ans;
}
int f(int x){
    int ans=0;
    while(!(x&1)){
        ans++;
        x>>=1;
    }
    return ans;
}
signed main(){
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    cin>>n;
    for(int i=1,x;i<=n;i++){
        cin>>x;
        s[f(x)]++;
    }
    for(int i=1;i<=30;i++){
        sum+=s[i];
    }
    ans=(ksm(2,n-sum)-1+mod)%mod*ksm(2,sum)%mod;
    for(int i=1;i<=30;i++){
        sum-=s[i];
        if(s[i]<2){
            continue;
        }
        ans=(ans+ksm(2,sum)%mod*(ksm(2,s[i]-1)-1+mod)%mod)%mod;
    }
    cout<<ans<<'\n';
    return 0;
}