85pts
#include <iostream>
using namespace std;
unsigned long long a, b, mod = 1000000007;
unsigned long long qpow (unsigned long long x, unsigned long long y, unsigned long long p) {
unsigned long long ans = 1;
while (y > 0) {
if (y & 1) ans = (ans * x) % p;
x = (x * x) % p;
y >>= 1;
}
return ans;
} // 此为快速幂
unsigned long long c(unsigned long long x, unsigned long long y) {
unsigned long long sum = 1, chu = 1;
for (unsigned long long n = x, m = y; m >= 1; n--, m--) {
sum *= n;
if (sum % m == 0) sum /= m;
else chu *= m;
}
return ((sum % mod) * qpow(chu, mod - 2, mod)) % mod;
} // 此为组合计算
signed main() {
cin >> a >> b;
if (a < b) {
cout << 0 << endl;
return 0;
}
cout << ((qpow(2, a - b, mod) % mod) * (c(a, b) % mod)) % mod << endl;
return 0;
} // 求结果
大家肯定都在看春晚