#include <bits/stdc++.h>
inline long long read() {
  long long x = 0, f = 1;
  char c = getchar();
  for (; c > '9' || c < '0'; c = getchar()) {
    if (c == '-') f = -1;
  }
  for (; c >= '0' && c <= '9'; c = getchar()) {
    x = x * 10 + c - '0';
  }
  return x * f;
}
int v[2500005], ans[2500005];
int get_id(int x) {
  if (!v[x << 1] && !v[x << 1 | 1])
    return x;
  else if (v[x << 1] > v[x << 1 | 1])
    return get_id(x << 1);
  else
    return get_id(x << 1 | 1);
}
void perform(int x) {
  int lson = x << 1, rson = x << 1 | 1;
  if (!v[lson] && !v[rson])
    v[x] = 0;
  else {
    if (v[lson] > v[rson]) {
      v[x] = v[lson];
      perform(lson);
    } else {
      v[x] = v[rson];
      perform(rson);
    }
  }
}
inline void work() {
  for (int t = read(); t; t--) {
    int h = read(), g = read(), cnt = 0;
    long long sum = 0;
    h = (1 << h) - 1;
    g = (1 << g) - 1;
    for (int i = 1; i <= h; i++) v[i] = read();
    for (int i = 1; i <= g; i++) {
      for (; get_id(i) > g;) {
        ans[++cnt] = i;
        perform(i);
      }
    }
    for (int i = 1; i <= g; i++) sum += v[i];
    printf("%lld\n", sum);
    for (int i = 1; i <= cnt; i++)
      printf("%d%c", ans[i], i == cnt ? '\n' : ' ');
    for (int i = 1; i <= h; i++) v[i] = 0;
  }
}
int main() {
  work();
  return 0;
}
