Wrong Answer in CSES two set 2

Task is to count the number of ways numbers 1,2,…,n can be divided into two sets of equal sum.

Input : The only input line contains an integer n.
Output : Print the answer modulo 109+7.
Constraints : 1≤n≤500

My code

#include <iostream>
#include<vector>
using namespace std;
 
const int m = 1e9+7;
int n;                                      // input
vector<vector<int>>dp;                      // for memoization
 
int solve(int i,int sum){
    if(sum==0) return 1;                    // if sum is zero then we found a solution
    if(sum<0 || i>n) return 0;
    if(dp[i][sum]!=-1) return dp[i][sum];
    return dp[i][sum]= ( (solve(i+1,sum))%m + (solve(i+1,sum-i))%m )%m;       // for ith element two choice either take ith element or ignore it
    
}
 
int main() {
    cin>>n;
    int sum= ((n)*(n+1))/2;                // sum of first n term
    if(sum%2!=0){                          // if sum of n numbers is not divisible by two 2 we cann't divide in two subset of equal sum
        cout<<0; 
        return 0;
    }
    sum=sum/2;                              
    dp.assign(n+1,vector<int>(sum+1,-1));
    int ans=solve(1,sum)/2;                  // if set is divivded in subset A and B then (A and B) and (B and A) will be same.      
    cout<<ans;
}

This code fails for some test case where i am getting wrong ?

I forgot to take modulo in answer.