RT,帮帮蒟蒻
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=15,M=(1<<15)+10,mod=1000000007;
int n,a[N],o,f[M],g[M];
bool can[M];
int lb(int x)
{
return x & -x;
}
signed main()
{
scanf("%lld",&n);
for(int i=1;i<=n;i++)
scanf("%lld",&a[i]);
sort(a+1,a+n+1);
o=(1<<n)-1;
int sum,now,gs;
for(int i=1;i<=o;i++)
{
sum=0,now=0,gs=0;
for(int j=1;j<=n;j++)
if((i&(1<<(j-1)))) sum+=a[j],now=j,gs++;
if(a[now]==sum-a[now]||a[now]==sum) g[i]=1+(gs==2),can[i]=true;
}
f[0]=1;
for(int i=1;i<=o;i++)
{
for(int j=i;j;j=((j-1)&i))
if(can[j]&&(lb(j^i)>lb(j)||j==i))
f[i]=(f[i]+1ll*g[j]*f[i^j]%mod)%mod;
}
printf("%lld\n",f[o]);
return 0;
}