#include <bits/stdc++.h>
using namespace std;
const int mod = 998244353;
const int N = 300005;
const int M = 23;
int power(int b, long long exp) {
  int res = 1;
  while (exp > 0) {
    if (exp % 2) {
      res = 1LL * res * b % mod;
    }
    b = 1LL * b * b % mod;
    exp /= 2;
  }
  return res;
}
int H, G, a[1 << M], ht[1 << M], cnt[1 << M];
void build(int node, int h) {
  if (a[node] == 0) {
    ht[node] = 0;
    cnt[node] = 0;
    return;
  }
  ht[node] = h;
  build(node << 1, h + 1);
  build(node << 1 | 1, h + 1);
  cnt[node] = cnt[node << 1] + cnt[node << 1 | 1] + 1;
}
bool check(int node) {
  int h = ht[node];
  if ((1 << (G - h + 1)) - 1 == cnt[node]) {
    return true;
  }
  return false;
}
int ans;
void perform(int node) {
  if (ht[node] > G) return;
  if (a[node << 1] == 0 && a[node << 1 | 1] == 0) {
    return;
  }
  if (a[node << 1] > a[node << 1 | 1]) {
    if (check(node << 1)) {
      ans = node << 1 | 1;
      perform(node << 1 | 1);
    } else {
      perform(node << 1);
    }
  } else {
    if (check(node << 1 | 1)) {
      ans = node << 1;
      perform(node << 1);
    } else {
      perform(node << 1 | 1);
    }
  }
  return;
}
void update(int node) {
  if (a[node] == 0) {
    cnt[node] = 0;
    return;
  }
  if (a[node << 1] == 0 && a[node << 1 | 1] == 0) {
    a[node] = cnt[node] = 0;
    return;
  }
  if (a[node << 1] > a[node << 1 | 1]) {
    a[node] = a[node << 1];
    update(node << 1);
  } else {
    a[node] = a[node << 1 | 1];
    update(node << 1 | 1);
  }
  cnt[node] = cnt[node << 1] + cnt[node << 1 | 1] + 1;
}
int main() {
  int test = 1;
  scanf("%d", &test);
  while (test--) {
    long long sum = 0;
    scanf("%d %d", &H, &G);
    for (int i = 0; i < (1 << (H + 3)); i++) {
      a[i] = cnt[i] = 0;
    }
    for (int i = 1; i < (1 << H); i++) {
      scanf("%d", &a[i]);
    }
    build(1, 1);
    vector<int> res;
    int tot = (1 << H) - (1 << G);
    while (tot--) {
      ans = 1;
      perform(1);
      update(ans);
      res.push_back(ans);
      while (ans > 1) {
        ans /= 2;
        cnt[ans] = cnt[ans << 1] + cnt[ans << 1 | 1] + 1;
      }
    }
    for (int i = 1; i < (1 << G); i++) {
      sum += a[i];
    }
    printf("%lld\n", sum);
    for (int idx : res) {
      printf("%d ", idx);
    }
    printf("\n");
  }
  return 0;
}
