#include <bits/stdc++.h>
using namespace std;
const int inf = 0x3f3f3f3f;
const int N = (1 << 21) + 100;
int a[N];
int get_id(int k) {
  if (!a[k << 1] && !a[k << 1 | 1]) return k;
  if (a[k << 1] > a[k << 1 | 1])
    return get_id(k << 1);
  else
    return get_id(k << 1 | 1);
}
void dfs(int k) {
  if (!a[k << 1] && !a[k << 1 | 1])
    a[k] = 0;
  else if (a[k << 1] > a[k << 1 | 1]) {
    a[k] = a[k << 1];
    dfs(k << 1);
  } else {
    a[k] = a[k << 1 | 1];
    dfs(k << 1 | 1);
  }
}
int main() {
  int w;
  cin >> w;
  while (w--) {
    int h, g;
    scanf("%d%d", &h, &g);
    for (int i = 1; i < 1 << (h + 1); i++) a[i] = 0;
    for (int i = 1; i < 1 << h; i++) scanf("%d", a + i);
    vector<int> ans;
    int limit = (1 << g) - 1;
    for (int i = 1; i < 1 << g; i++)
      while (get_id(i) > limit) {
        ans.push_back(i);
        dfs(i);
      }
    long long sum = 0;
    for (int i = 1; i < 1 << g; i++) sum += a[i];
    printf("%lld\n", sum);
    for (int i = 0; i < ans.size(); i++) printf("%d ", ans[i]);
    puts("");
  }
  return 0;
}
