This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <iostream>
#include <vector>
#include <algorithm>
#include <cassert>
#include <cstdio>
using namespace std;
#define pb push_back
#define a first
#define b second
typedef long long int llo;
llo mod=1000000007;
int main(){
llo n,m;
cin>>n>>m;
llo dp[n][m];
dp[0][0]=5;
for(llo i=1;i<n;i++){
dp[i][0]=4*(i+1)+((i+1)*i)/2;
dp[i][0]+=1;
dp[i][0]%=mod;
}
for(llo j=1;j<m;j++){
dp[0][j]=4*(j+1)+((j+1)*j)/2;
dp[0][j]+=1;
dp[0][j]%=mod;
}
for(llo i=1;i<n;i++){
for(llo j=1;j<m;j++){
dp[i][j]=4*(j+1)*dp[i-1][j-1];
dp[i][j]+=dp[i-1][j];
if(i>1){
dp[i][j]+=dp[i-2][j-1]*(((j+1)*(i))%mod);
}
else{
dp[i][j]+=(((j+1)*i)%mod);
}
if(j>1){
dp[i][j]+=((((j+1)*j)/2)%mod)*dp[i-1][j-2];
}
else{
dp[i][j]+=((j+1)*j)/2;
}
dp[i][j]%=mod;
}
}
/*for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
cout<<dp[i][j]<<" ";
}
cout<<endl;
}*/
cout<<(dp[n-1][m-1]+mod-1)%mod<<endl;
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |