func_code_string: #include <bits/stdc++.h>   using namespace std;   const int SIZE = 1 << 20;   int INF = 1000000001;   int a[SIZE], ops[SIZE];   int h, g;   int qq[24], qn;   int pull(int id) {     int tmp = a[id];     a[id] = 0;     qn = 0;     qq[qn++] = id;     while (id * 2 < (1 << h) && a[id] < max(a[id << 1], a[(id << 1) | 1])) {       if (a[id << 1] > a[(id << 1) | 1]) {         swap(a[id << 1], a[id]);         id <<= 1;       } else {         swap(a[(id << 1) | 1], a[id]);         id = (id << 1) | 1;       }       qq[qn++] = id;     }     if (id < (1 << g)) {       for (int i = qn - 1; i > 0; i--) {         a[qq[i]] = a[qq[i - 1]];       }       a[qq[0]] = tmp;       return 0;     }     return tmp;   }   void solve() {     scanf( %d%d , &h, &g);     long long an = 0;     for (int i = 1; i < (1 << h); i++) {       scanf( %d , &a[i]);       an += a[i];     }     int need = 0;     for (int i = 1; i < (1 << g); i++) {       while (1) {         int v = pull(i);         if (v) {           an -= v;           ops[need++] = i;         } else           break;       }     }     printf( %lld n , an);     for (int i = 0; i < need; i++) printf( %d%c , ops[i],    n [i == need - 1]);   }   int main() {     int T;     scanf( %d , &T);     while (T--) solve();     return 0;   }   