#include <bits/stdc++.h>
using namespace std;
template <class T>
void read(T &x) {
  int f = 0;
  x = 0;
  char ch = getchar();
  for (; !isdigit(ch); ch = getchar()) f |= (ch == '-');
  for (; isdigit(ch); ch = getchar()) x = x * 10 + ch - '0';
  if (f) x = -x;
}
const int N = (1 << 20) + 5;
int a[N], b[N], h, g, n;
vector<pair<int, int> > v[N];
long long sum;
int dfs(int x, int d) {
  if (x * 2 > n) {
    v[x].push_back(make_pair(-a[x], x));
    return 0;
  }
  int lc = x * 2, rc = lc + 1;
  int mx = max(dfs(lc, d - 1), dfs(rc, d - 1));
  v[x].push_back(make_pair(-a[x], x));
  v[x].resize(v[lc].size() + v[rc].size() + 1);
  merge(v[lc].begin(), v[lc].end(), v[rc].begin(), v[rc].end(),
        next(v[x].begin()));
  while (-v[x].back().first < mx) v[x].pop_back();
  if (d > 0) {
    b[v[x].back().second] = 1;
    int ret = -v[x].back().first;
    sum += ret, v[x].pop_back();
    return ret;
  }
  return 0;
}
void rmain() {
  read(h), read(g), n = (1 << h) - 1, sum = 0;
  for (int i = (1); i <= (n); i++) {
    read(a[i]);
    b[i] = 0, v[i].clear();
  }
  dfs(1, g);
  printf("%lld\n", sum);
  for (int i = (n); i >= (1); i--)
    if (!b[i]) printf("%d ", i);
  puts("");
}
int main() {
  int T;
  read(T);
  while (T--) rmain();
  return 0;
}
