#include <bits/stdc++.h>
using namespace std;
long long heap[4000005];
vector<long long> ans;
long long answer = 0, sum = 0;
void sift_down(int v) {
  answer += heap[v];
  heap[v] = 0;
  while (heap[2 * v] != 0 || heap[2 * v + 1] != 0) {
    int mx = (heap[2 * v] > heap[2 * v + 1]) ? 2 * v : 2 * v + 1;
    swap(heap[v], heap[mx]);
    v = mx;
  }
  return;
}
void dfs(int v, int hei, int g) {
  if (heap[v] == 0) return;
  if (hei > g) {
    while (heap[v] != 0) sift_down(v), ans.push_back(v);
    return;
  }
  int hh = hei, cop = v;
  while (heap[2 * v] != 0 || heap[2 * v + 1] != 0) {
    int mx = (heap[2 * v] > heap[2 * v + 1]) ? 2 * v : 2 * v + 1;
    v = mx;
    hh++;
  }
  v = cop;
  while (hh != g) {
    sift_down(v), ans.push_back(v);
    hh = hei, cop = v;
    while (heap[2 * v] != 0 || heap[2 * v + 1] != 0) {
      int mx = (heap[2 * v] > heap[2 * v + 1]) ? 2 * v : 2 * v + 1;
      v = mx;
      hh++;
    }
    v = cop;
  }
  dfs(2 * v, hei + 1, g);
  dfs(2 * v + 1, hei + 1, g);
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  int test;
  cin >> test;
  for (int rep = 1; rep <= test; rep++) {
    sum = 0;
    int h, g;
    cin >> h >> g;
    for (int i = 1; i <= (1 << h) - 1; i++) cin >> heap[i], sum += heap[i];
    for (int i = (1 << h); i < (1 << (h + 1)); i++) heap[i] = 0;
    ans.clear();
    answer = 0;
    dfs(1, 1, g);
    cout << sum - answer << '\n';
    for (int i = 0; i < (int)ans.size(); i++) cout << ans[i] << ' ';
    cout << '\n';
  }
  return 0;
}
