#include <bits/stdc++.h>
using namespace std;
vector<int> a;
vector<int> done;
vector<int> sol;
long long sum = 0;
int h, g;
bool step(int x, int d) {
  int depth = d;
  int cx = x;
  while (a[cx] != 0) {
    if (a[2 * cx] > a[2 * cx + 1])
      cx = 2 * cx;
    else
      cx = 2 * cx + 1;
    ++depth;
  }
  if (depth > g + 1) {
    sol.push_back(x);
    sum -= a[x];
    int prev = 0;
    while (cx != x) {
      cx /= 2;
      --depth;
      if (depth == g) {
        done[cx] = (a[2 * cx] == 0 and a[2 * cx + 1] == 0);
      } else if (depth < g) {
        done[cx] = done[2 * cx] and done[2 * cx + 1];
      }
      swap(prev, a[cx]);
    }
    return true;
  }
  return false;
}
void solve(int x, int d) {
  if (step(x, d)) {
    return;
  } else {
    if (a[2 * x] > a[2 * x + 1]) {
      if (!done[2 * x])
        solve(2 * x, d + 1);
      else
        solve(2 * x + 1, d + 1);
    } else {
      if (!done[2 * x + 1])
        solve(2 * x + 1, d + 1);
      else
        solve(2 * x, d + 1);
    }
    if (d == g) {
      done[x] = (a[2 * x] == 0 and a[2 * x + 1] == 0);
    } else if (d < g) {
      done[x] = done[2 * x] and done[2 * x + 1];
    }
  }
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  int t;
  cin >> t;
  while (t--) {
    cin >> h >> g;
    done = a = vector<int>(1 << (h + 1), 0);
    sol.clear();
    sum = 0;
    for (int i = (1 << h); i < int(done.size()); ++i) done[i] = 1;
    for (int i = 1; i < (1 << h); ++i) {
      cin >> a[i];
      sum += a[i];
    }
    while (!done[1]) solve(1, 1);
    cout << sum << "\n";
    for (int x : sol) cout << x << " ";
    cout << "\n";
  }
}
