luogu
{
}
\{\}
{}为第二类
s
t
r
i
n
g
string
string数
∑
i
=
1
n
C
(
n
,
i
)
∗
i
k
\sum_{i=1}^{n}C(n,i)*i^k
i=1∑nC(n,i)∗ik
∑
i
=
1
n
C
(
n
,
i
)
∑
j
=
0
k
j
!
∗
{
k
,
j
}
∗
C
(
i
,
j
)
\sum_{i=1}^{n}C(n,i)\sum_{j=0}^{k}j!*\{k,j\}*C(i,j)
i=1∑nC(n,i)j=0∑kj!∗{k,j}∗C(i,j)
∑
i
=
1
n
∑
j
=
0
k
C
(
n
,
i
)
∗
C
(
i
,
j
)
∗
j
!
∗
{
k
,
j
}
\sum_{i=1}^{n}\sum_{j=0}^{k}C(n,i)*C(i,j)*j!*\{k,j\}
i=1∑nj=0∑kC(n,i)∗C(i,j)∗j!∗{k,j}
∑
j
=
0
k
j
!
∗
{
k
,
j
}
∑
i
=
1
n
C
(
n
,
i
)
∗
C
(
i
,
j
)
\sum_{j=0}^{k}j!*\{k,j\}\sum_{i=1}^{n}C(n,i)*C(i,j)
j=0∑kj!∗{k,j}i=1∑nC(n,i)∗C(i,j)
∑
j
=
0
k
j
!
∗
{
k
,
j
}
∑
i
=
1
n
C
(
n
,
j
)
∗
C
(
n
−
j
,
i
−
j
)
\sum_{j=0}^{k}j!*\{k,j\}\sum_{i=1}^{n}C(n,j)*C(n-j,i-j)
j=0∑kj!∗{k,j}i=1∑nC(n,j)∗C(n−j,i−j)
∑
j
=
0
k
j
!
∗
{
k
,
j
}
∑
i
=
1
n
C
(
n
,
j
)
∗
C
(
n
−
j
,
i
−
j
)
\sum_{j=0}^{k}j!*\{k,j\}\sum_{i=1}^{n}C(n,j)*C(n-j,i-j)
j=0∑kj!∗{k,j}i=1∑nC(n,j)∗C(n−j,i−j)
∑
j
=
0
k
j
!
∗
{
k
,
j
}
∗
C
(
n
,
j
)
∑
i
=
1
n
C
(
n
−
j
,
i
−
j
)
\sum_{j=0}^{k}j!*\{k,j\}*C(n,j)\sum_{i=1}^{n}C(n-j,i-j)
j=0∑kj!∗{k,j}∗C(n,j)i=1∑nC(n−j,i−j)
∑
j
=
0
k
j
!
∗
{
k
,
j
}
∗
C
(
n
,
j
)
∗
2
n
−
j
\sum_{j=0}^{k}j!*\{k,j\}*C(n,j)*2^{n-j}
j=0∑kj!∗{k,j}∗C(n,j)∗2n−j
#include <bits/stdc++.h>
using namespace std;
const int mo = 1e9+7;
typedef long long LL;
#define int LL
const int maxk = 5e3+5;
int readint(){
int x=0,f=1;char s=getchar();
#define sc (s=getchar())
while(s<'0'||s>'9'){
if(s=='-')
f=-1;
sc;
}
while(s>='0'&&s<='9'){
x=(x<<3)+(x<<1)+(s^48);
sc;
}
#undef sc
return x*f;
}
int C[maxk];
int fac[maxk];
int s[maxk][maxk];
int qkpow(int a,int b){
int ans=1;
while(b){
if(b&1)
ans=ans*a%mo;
b>>=1;
a=a*a%mo;
}
return ans;
}
void init(int n,int k){
C[1]=n;C[0]=1;
for(int i=2;i<=k;i++)
C[i]=C[i-1]*(n-i+1)%mo*qkpow(i,mo-2)%mo;
s[0][0]=1;
for(int i=1;i<=k;i++){
for(int j=1;j<=i;j++){
s[i][j]=(s[i-1][j]*j%mo+s[i-1][j-1])%mo;
}
}
fac[1]=1;
for(int i=2;i<=k;i++){
fac[i]=fac[i-1]*i%mo;
}
}
signed main (){
int n=readint(),k=readint();
init(n,k);
int pow_2=qkpow(2,n);
int be=2;
int ans=0;
for(int j=1;j<=k;j++){
if(j>n)
break;
ans=(ans+fac[j]*s[k][j]%mo*C[j]%mo*pow_2%mo*qkpow(be,mo-2))%mo;
be=be*2%mo;
}
cout<<ans<<endl;
return 0;
}