#include<iostream>
#include<cmath>
#include<algorithm>
#include<cstring>
#define F(a,b,c) for(int a=b;a<=c;a++)
#define R(a,b,c) for(int a=b;a>=c;a--)
using namespace std;
struct Big{
int l,x[20];
Big operator * (int b){
Big c;
c.l=l;
memset(c.x,0,sizeof(c.x));
F(i,0,l-1){
c.x[i]=x[i]*b;
}
F(i,0,c.l-1){
while(c.x[i]>9){
c.x[i+1]+=c.x[i]/10;
c.x[i]%=10;
if(++i==c.l)++c.l;
}
}
return c;
}
void Print(){
R(i,l-1,0)cout<<x[i];
}
};
Big fic,fin,ans;
int n,m;
int main(){
cin>>n>>m;
ans.x[0]=1;
ans.l=1;
ans=ans*(n+1);
ans=ans*(n*(n+3)+2*m);
F(i,2,n){
ans=ans*i;
}
F(i,n-m+3+1,n+2){
ans=ans*i;
}
ans.Print();
return 0;
}
用的柿子是ans=A(n,n)A(n+1,2)A(n+3,m)+2m(n+1)A(n+2,m-1)A(n,n),化简成了ans=((n!(n+1)(n+2)!)/(n-m+3))(n(n+3)+2*m)