#include <bits/stdc++.h>
using namespace std;
const int maxn = 1 << 21;
int a[maxn], h[maxn];
int Fuck(int i) {
  if (a[2 * i] == 0 && a[2 * i + 1] == 0) return h[i];
  if (a[2 * i] > a[2 * i + 1])
    Fuck(2 * i);
  else
    Fuck(2 * i + 1);
}
void f(int i) {
  if (a[2 * i] == 0 && a[2 * i + 1] == 0) {
    a[i] = 0;
    return;
  }
  if (a[2 * i] > a[2 * i + 1]) {
    swap(a[i], a[2 * i]);
    f(2 * i);
  } else {
    swap(a[i], a[2 * i + 1]);
    f(2 * i + 1);
  }
}
int main() {
  ios_base::sync_with_stdio(0);
  h[1] = 1;
  for (int i = 2; i < (maxn / 2); i++) {
    h[i] = h[i / 2] + 1;
  }
  int t;
  cin >> t;
  while (t--) {
    int h, g, n;
    cin >> h >> g;
    n = 1 << h;
    for (int i = 0; i < 2 * n; i++) a[i] = 0;
    for (int i = 1; i < n; i++) {
      cin >> a[i];
    }
    vector<int> ans;
    for (int i = 1; i < (1 << g); i++) {
      while (Fuck(i) > (g)) {
        f(i);
        ans.push_back(i);
      }
    }
    long long sum = 0;
    for (int i = 1; i < (1 << g); i++) sum += a[i];
    cout << sum << endl;
    for (int i = 0; i < ans.size(); i++) cout << ans[i] << " ";
    cout << endl;
    ans.clear();
  }
}
