#include <bits/stdc++.h>
using namespace std;
#define pb push_back
#define endl '\n'
#define int long long
const int N=500+5,inf=2e9,MOD=1e9+7;
int dp[N*N],a[N];
bool can[N][N*N]; //can we achieve sum j if we remove i
signed main(){
    ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
    int n; cin>>n;
    for(int i=1;i<=n;i++)cin>>a[i];
    dp[0]=1;
    int tot=0;
    for(int i=1;i<=n;i++){
        tot+=a[i];
        for(int j=N*N-1;j>=0;j--){
            dp[j]=dp[j];
            if(j>=a[i])dp[j]+=dp[j-a[i]];
            dp[j]%=MOD;
        }
    }
    if(tot%2==1 || dp[tot/2]==0){
        cout<<0;
        return 0;
    }
    for(int i=1;i<=n;i++){
        for(int j=0;j<N*N;j++){
            if(j>=a[i])dp[j]-=dp[j-a[i]];
            dp[j]+=MOD;
            dp[j]%=MOD;
            if(dp[j]>0)can[i][j]=1;
        }
        for(int j=N*N-1;j>=0;j--){
            if(j>=a[i])dp[j]+=dp[j-a[i]];
            dp[j]%=MOD;
        }
    }
    vector<int> ans;
    for(int i=1;i<N*N;i++){
        bool flag=1;
        for(int j=1;j<=n;j++){
            int sum=tot-a[j];
            if(!((sum+i)%2==0 && can[j][(sum+i)/2])){
                flag=0;
            }
        }
        if(flag)ans.pb(i);
    }
    cout<<ans.size()<<endl;
    for(auto i:ans)cout<<i<<' ';
}
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... |