#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using ld = long double;
ll h, g;
vector<ll> a;
ll inv[(1 << 20) + 7];
bool check(ll i) {
  ll l = 2 * i;
  ll r = 2 * i + 1;
  if (a[l] == 0 && a[r] == 0) {
    return i >= (1ll << g);
  } else if (a[l] > a[r]) {
    return check(l);
  } else {
    return check(r);
  }
}
void pop(ll i) {
  ll l = 2 * i;
  ll r = 2 * i + 1;
  if (a[l] == 0 && a[r] == 0) {
    a[i] = 0;
  } else if (a[l] > a[r]) {
    a[i] = a[l];
    inv[a[i]] = i;
    pop(l);
  } else {
    a[i] = a[r];
    inv[a[i]] = i;
    pop(r);
  }
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(nullptr);
  ll t;
  cin >> t;
  for (ll i = 0; i < t; i++) {
    cin >> h >> g;
    a.assign(1ll << (h + 1), 0);
    ll sum = 0;
    vector<ll> sorted((ll)(a).size() - 1);
    for (ll j = 1; j < (1ll << h); j++) {
      cin >> a[j];
      inv[a[j]] = j;
      sum += a[j];
      sorted[j - 1] = a[j];
    }
    sort(begin(sorted), end(sorted), greater<ll>());
    vector<ll> opps;
    for (ll x : sorted) {
      if (check(inv[x])) {
        sum -= x;
        opps.push_back(inv[x]);
        pop(inv[x]);
      }
    }
    cout << sum << "\n";
    for (ll x : opps) {
      cout << x << " ";
    }
    cout << "\n";
  }
}
