#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;
}
