#include using namespace std; const int nmax=300+5,mod=1e9+7; int n,inp[nmax]; int dp[nmax][nmax*nmax]; int rec(int pos,int delta) { if(pos==n) { //cout<inp[n])return 0; if(delta==inp[n]||delta==0)return 2; return 3; } if(dp[pos][delta]!=-1)return dp[pos][delta]; int ret=rec(pos+1,delta+inp[pos]); ret=ret+rec(pos+1,delta); if(ret>=mod)ret=ret-mod; ret=ret+rec(pos+1,abs(delta-inp[pos])); if(ret>=mod)ret=ret-mod; dp[pos][delta]=ret; return ret; } int main() { freopen("duel.in","r",stdin); freopen("duel.out","w",stdout); scanf("%i",&n); for(int i=1;i<=n;i++)scanf("%i",&inp[i]); memset(dp,-1,sizeof(dp)); printf("%i\n",rec(1,0)); return 0; }