func_code_string: #include <bits/stdc++.h>   using namespace std;   const int MAXN = 2e3 + 6.66;   const int MAXM = 2e3 + 6.66;   const long long MOD = 1e9 + 7;   long long dp[MAXN][MAXM];   long long dp1[MAXN][MAXM];   long long par[MAXN][MAXM];   long long par2[MAXN][MAXM];   int main() {     ios::sync_with_stdio(false);     cin.tie(NULL);     cout.tie(NULL);     int n, m;     cin >> n >> m;     for (int sz = 0; sz < m - 1; sz++) dp[0][sz] = 1;     for (int i = 1; i <= n; i++) {       for (int j = 0; j < m - 1; j++) {         if (i == 1) {           dp[i][j] = 1;           dp1[i][j] = 1;           par[i][j] = j + 1;           par2[i][j] = par2[i][j - 1] + j + 1;           continue;         }         dp1[i][j] = (1 + ((2 + j) * par[i - 1][j - 1]) % MOD * 1LL -                      par2[i - 1][j - 1] * 1LL + MOD) %                     MOD;         dp[i][j] =             (1 + ((2 + j) * par[i - 1][j]) % MOD - par2[i - 1][j] + MOD) % MOD;         par[i][j] = (par[i][j - 1] + dp[i][j]) % MOD;         par2[i][j] = (par2[i][j - 1] + (1LL * (j + 1LL) * dp[i][j]) % MOD) % MOD;       }     }     long long ans = 0LL;     for (int t = 0; t < n; t++)       for (int sz = 0; sz < m - 1; sz++) {         ans = (ans +                (((m - sz - 1LL) * 1LL * dp[t + 1][sz]) % MOD * dp1[n - t][sz]) %                    MOD) %               MOD;       }     cout << ans << endl;     return 0;   }   