#include <bits/stdc++.h>
using namespace std;
const int N = 1e7 + 33;
int mx;
int a[N];
int getid(int i) {
  int lc = i << 1, rc = i << 1 | 1;
  if (!a[lc] && !a[rc]) return i;
  if (a[lc] > a[rc]) return getid(lc);
  return getid(rc);
}
void del(int i) {
  int lc = i << 1, rc = i << 1 | 1;
  if (!a[lc] && !a[rc]) {
    a[i] = 0;
    return;
  }
  if (a[lc] > a[rc]) {
    a[i] = a[lc];
    del(lc);
    return;
  }
  a[i] = a[rc];
  del(rc);
}
int st[N], tp;
void Dfs(int x) {
  if (x > mx) {
    while (a[x]) {
      st[++tp] = x;
      del(x);
    }
    return;
  }
  for (int y = getid(x); y > mx; y = getid(x)) {
    st[++tp] = x;
    del(x);
  }
  Dfs((x << 1));
  Dfs((x << 1 | 1));
}
int re() {
  int i = 0, f = 1;
  char c = getchar();
  for (; !isdigit(c); c = getchar())
    if (c == '-') f = -1;
  for (; isdigit(c); c = getchar()) i = (i << 3) + (i << 1) + c - '0';
  return i * f;
}
void solve() {
  int n, m;
  cin >> n >> m;
  n = (1 << n) - 1;
  mx = (1 << m) - 1;
  memset(a + 1, 0, sizeof(int) * (2 * n + 1));
  for (int i = 1; i <= n; ++i) a[i] = re();
  tp = 0;
  Dfs(1);
  long long as = 0;
  for (int i = 1; i <= n; ++i) as = as + a[i];
  printf("%lld\n", as);
  for (int i = 1; i <= tp; ++i) printf("%d ", st[i]);
  puts("");
}
signed main() {
  int T;
  cin >> T;
  while (T--) solve();
}
