func_code_string: #include <bits/stdc++.h>   using namespace std;   const int N = 5005;   const long long p = 1e9 + 7;   long long dp[N], dp1[N];   long long modexp(long long a, long long b, long long p) {     long long ans = 1LL;     a %= p;     while (b) {       if (b & 1) ans = ans * a % p;       b >>= 1;       a = a * a % p;     }     return ans;   }   int main() {     memset(dp, 0, sizeof(dp));     int n, k;     scanf( %d%d , &n, &k);     dp[0] = 1LL;     for (int i = 1; i <= k; i++) {       for (int j = 0; j < N; j++) {         if (j) {           dp1[j] += j * 1LL * dp[j];           dp1[j] %= p;         }         if (dp[j]) {           dp1[j + 1] += (n - j) * 1LL * dp[j];           dp1[j + 1] %= p;         }       }       for (int j = 0; j < N; j++) dp[j] = dp1[j];       memset(dp1, 0, sizeof(dp1));     }     long long ans = 0;     for (int i = 0; i <= min(n, N - 1); i++)       ans = (ans + dp[i] * modexp(2, n - i, p) % p) % p;     printf( %lld n , ans);     return 0;   }   