先考虑
n
张椅子排成一个环的情况。那么所有方案都是合法的。
考虑一个椅子空着的方案数。共有
如果
n
张椅子排成一排,那么我们可以增加一张椅子,使得它和第一张椅子、最后一张椅子都可以互相到达。于是
代码
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
#define M 1000000007
int n,m,i,k;
inline int Pow(int x,int y){
int Ans=1;
for(;y;y>>=1,x=1ll*x*x%M)if(y&1)Ans=1ll*Ans*x%M;
return Ans;
}
int main(){
scanf("%d%d",&n,&m);n++;
printf("%d\n",1ll*Pow(2*n,m)*(n-m)%M*Pow(n,M-2)%M);
return 0;
}