func_code_string: #include <bits/stdc++.h>   using namespace std;   int n, K;   int pover[64000];   int ipover[64000];   int dt[503][503];   int lsum[2][503][503];   const int mod = 1000000007;   int main() {     scanf( %d%d , &n, &K);     int maxval = 0;     pover[0] = 1;     for (int i = 1; i < 64000; i++) {       pover[i] = (pover[i - 1] * (long long)2) % mod;     }     ipover[0] = 1;     for (int i = 1; i < 64000; i++) {       ipover[i] = (ipover[i - 1] * (long long)500000004) % mod;     }     for (int j = 0; j <= 0; j++) {       dt[0][j] = 1;     }     for (int k = 0; k <= n; k++) {       long long ksum = 0;       for (int j = 0; j < k; j++) {         long long mul = pover[(k - j) * (n - k + 1)];         ksum = (ksum + dt[0][j] * mul) % mod;         lsum[1][j][k] = ksum;       }     }     for (int i = 1; i <= K; i++) {       int ci = i % 2;       for (int j = 1; j <= n; j++) {         for (int k = 1; k <= j; k++) {           long long baseCnt = lsum[ci][k - 1][j];           long long tot = baseCnt * ipover[j - k + 1] % mod;           dt[i][j] = (dt[i][j] + tot) % mod;         }       }       int ni = 1 - i % 2;       memset(lsum[ni], 0, sizeof(lsum[0]));       for (int k = 0; k <= n; k++) {         long long ksum = 0;         for (int j = 0; j < k; j++) {           long long mul = pover[(k - j) * (n - k + 1)];           ksum = (ksum + dt[i][j] * mul) % mod;           lsum[ni][j][k] = ksum;         }       }     }     long long ans = 0;     for (int i = 0; i <= n; i++) {       ans += dt[K][i];       ans %= mod;     }     ans %= mod;     printf( %d n , (int)ans);     return 0;   }   