#include #include #include #include #include #include #include #include #include #include #include #include #define all(v) (v).begin(), (v).end() #define rep(i, j) for (ll i = 0; i < j; ++i) #define rep2(i, j, k) for (ll i = j; i <= k; ++i) #define rep3(i, j, k) for (ll i = j; i >= k; --i) using namespace std; using ld = long double; using ll = long long; using pi = pair; using pl = pair; using vi = vector; using vl = vector; using vpi = vector; using vpl = vector; using vvi = vector; using vvl = vector; using vvpi = vector; using vvpl = vector; template using pqg = priority_queue, greater>; template inline bool chmax(S& x, T y) { if (x < y) { x = y; return 1; } return 0; } template inline bool chmin(S& x, T y) { if (x > y) { x = y; return 1; } return 0; } constexpr int INF = 1000000000; constexpr int MAX = 5005; constexpr int MOD = 998244353; constexpr ll INFLL = 1000000000000000000; int main(void) { int n; cin >> n; vi a(n); rep(i, n) cin >> a[i]; map dp[n+1]; dp[0][0] = 1; rep(i, n) { for (auto [key, val] : dp[i]) { dp[i+1][key + a[i]] += val; dp[i+1][key + a[i]] %= MOD; dp[i+1][key - a[i]] += val; dp[i+1][key - a[i]] %= MOD; } } ll ans = 0; for (auto [key, val] : dp[n]) { ans += abs(key) * val % MOD; ans %= MOD; } cout << ans << endl; return (0); }