#include <bits/stdc++.h>
using namespace std;
const long long MOD = 998244353;
int main(){
  int N;
  cin >> N;
  vector<int> W(N);
  for (int i = 0; i < N; i++){
    cin >> W[i];
  }
  int S = 0;
  for (int i = 0; i < N; i++){
    S += W[i];
  }
  if (S % 2 == 1){
    cout << 0 << endl;
  } else {
    vector<vector<long long>> dp(1, vector<long long>(S / 2 + 1, 0));
    dp[0][0] = 1;
    for (int i = 0; i < N; i++){
      vector<vector<long long>> dp2(i + 2, vector<long long>(S / 2 + 1, 0));
      for (int j = 0; j <= i; j++){
        for (int k = 0; k <= S / 2; k++){
          if (dp[j][k] > 0){
            dp2[j][k] += dp[j][k];
            dp2[j][k] %= MOD;
            if (k + W[i] <= S / 2){
              dp2[j + 1][k + W[i]] += dp[j][k];
              dp2[j + 1][k + W[i]] %= MOD;
            }
          }
        }
      }
      swap(dp, dp2);
    }
    vector<long long> cnt(N + 1, 0);
    for (int i = 0; i <= N; i++){
      cnt[i] = dp[i][S / 2];
    }
    vector<long long> fact(N + 1, 1);
    for (int i = 1; i <= N; i++){
      fact[i] = fact[i - 1] * i % MOD;
    }
    long long ans = 0;
    for (int i = 0; i <= N; i++){
      ans += fact[i] * fact[N - i] % MOD * cnt[i] % MOD;
    }
    ans %= MOD;
    cout << ans << endl;
  }
}
#include<bits/stdc++.h>
template <typename _Tp>void read(_Tp &x){
	char ch(getchar());bool f(false);while(!isdigit(ch))f|=ch==45,ch=getchar();
	x=ch&15,ch=getchar();while(isdigit(ch))x=x*10+(ch&15),ch=getchar();
	if(f)x=-x;
}
template <typename _Tp,typename... Args>void read(_Tp &t,Args &...args){read(t);read(args...);}
const int N=105,mod=998244353;
template<typename _Tp1,typename _Tp2>inline void add(_Tp1 &a,_Tp2 b){(a+=b)>=mod&&(a-=mod);}
template<typename _Tp1,typename _Tp2>inline void sub(_Tp1 &a,_Tp2 b){(a-=b)<0&&(a+=mod);}
int f[N][20005],g[N][20005];
long long fac[N];
int main(){
	fac[0]=fac[1]=1;for(int i=2;i<N;++i)fac[i]=fac[i-1]*i%mod;
	int n;read(n);
	f[0][10000]=1;int s=0;
	for(int i=1,x;i<=n;++i){
		read(x),s=std::min(10000,x+s);
		memset(g,0,sizeof(g));
		for(int j=0;j<i;++j){
			for(int k=10000-s;k<=10000+s;++k){
				if(k-x>=0)add(g[j+1][k-x],f[j][k]);
				if(k+x<=20000)add(g[j][k+x],f[j][k]);
			}
		}
		memcpy(f,g,sizeof(f));
	}
	int ans=0;
	for(int i=0;i<=n;++i)add(ans,1LL*f[i][10000]*fac[i]%mod*fac[n-i]%mod);
	printf("%d\n",ans);
	return 0;
}