#include <bits/stdc++.h>
using namespace std;
int32_t main() {
  ios::sync_with_stdio(0);
  cin.tie(NULL);
  cout.tie(NULL);
  vector<long long> lg2(1ll << 21);
  for (long long i = 1; i < lg2.size(); ++i) {
    if ((i << 1) < lg2.size()) {
      lg2[i << 1] = lg2[i] + 1;
      lg2[i << 1 | 1] = lg2[i] + 1;
    }
  }
  long long t;
  cin >> t;
  while (t--) {
    long long h, g;
    cin >> h >> g;
    long long n = 1ll << h;
    vector<long long> a(n << 1);
    vector<long long> d(n << 1);
    d[0] = h + 1;
    long long sm = 0;
    for (long long i = 1; i < n; ++i) {
      cin >> a[i];
      sm += a[i];
      d[i] = d[i >> 1] - 1;
      assert(d[i] + lg2[i] == h);
    }
    vector<long long> ans;
    deque<long long> q;
    q.push_back(1);
    for (long long c = 0, i = 1; c < (n - (1ll << g));) {
      i = q.front();
      if (d[i] + lg2[i] == g) {
        q.pop_front();
        q.push_back(i << 1);
        q.push_back(i << 1 | 1);
        continue;
      }
      if (!a[i]) continue;
      ans.push_back(i);
      sm -= a[i];
      c++;
      deque<long long> path;
      long long j = i;
      while (j < n) {
        if (!a[j << 1] && !a[j << 1 | 1]) {
          a[j] = 0;
          d[j] = 0;
          break;
        }
        path.push_front(j);
        if (a[j << 1] > a[j << 1 | 1]) {
          a[j] = a[j << 1];
          j <<= 1;
        } else {
          a[j] = a[j << 1 | 1];
          j = (j << 1) | 1;
        }
      }
      for (auto u : path) {
        if (a[u << 1] > a[u << 1 | 1])
          d[u] = d[u << 1] + 1;
        else
          d[u] = d[u << 1 | 1] + 1;
      }
    }
    cout << sm << '\n';
    for (auto x : ans) cout << x << ' ';
    cout << '\n';
  }
}
