#include <bits/stdc++.h>
using namespace std;
const int N = 4194304;
int t, h, g, a[N], Get[N], ok[N];
long long ans;
vector<pair<int, int> > dnc(int i) {
  vector<pair<int, int> > q;
  if (i >= 1 << h) return q;
  vector<pair<int, int> > ql = dnc(i * 2);
  vector<pair<int, int> > qr = dnc(i * 2 + 1);
  int il = 0, ir = 0;
  q.push_back({a[i], i});
  while (il < ql.size() || ir < qr.size()) {
    if (il == ql.size()) {
      q.push_back(qr[ir++]);
      continue;
    }
    if (ir == qr.size()) {
      q.push_back(ql[il++]);
      continue;
    }
    if (ql[il].first > qr[ir].first)
      q.push_back(ql[il++]);
    else
      q.push_back(qr[ir++]);
  }
  if (i >= 1 << g) return q;
  int before = max(Get[i * 2], Get[i * 2 + 1]);
  while (q.back().first < before) q.pop_back();
  pair<int, int> val = q.back();
  q.pop_back();
  ok[val.second] = 1;
  ans += 1LL * val.first;
  Get[i] = val.first;
  return q;
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  cin >> t;
  while (t--) {
    cin >> h >> g;
    for (int i = 1; i <= 1 << (h + 1); i++) a[i] = Get[i] = ok[i] = 0;
    for (int i = 1; i < 1 << h; i++) cin >> a[i];
    ans = 0;
    dnc(1);
    cout << ans << "\n";
    for (int i = (1 << h) - 1; i > 0; i--)
      if (!ok[i]) cout << i << " ";
    cout << "\n";
  }
}
