#include <bits/stdc++.h>
using namespace std;
int main(void) {
  int t;
  int m[31];
  m[0] = 1;
  for (int i = 1; i < 31; i++) {
    m[i] = m[i - 1] * 2;
  }
  scanf("%i", &t);
  for (int l = 0; l < t; l++) {
    int h, g;
    scanf("%i %i", &h, &g);
    vector<long long> a;
    a.resize(m[h + 1] + 1, 0);
    int i;
    for (i = 0; i < m[h] - 1; i++) {
      scanf("%lld", &a[i + 1]);
    }
    queue<int> f;
    f.push(1);
    vector<int> ress;
    while (!f.empty()) {
      int x = f.front();
      f.pop();
      int j = x;
      vector<pair<int, long long> > zmeny;
      bool stav = true;
      while (j < m[h]) {
        if (a[2 * j] > a[2 * j + 1]) {
          zmeny.push_back({j, a[2 * j]});
          j = 2 * j;
        } else if (a[2 * j + 1] > a[2 * j]) {
          zmeny.push_back({j, a[2 * j + 1]});
          j = 2 * j + 1;
        } else {
          if (j < m[g]) {
            stav = false;
            if (2 * x < m[g]) f.push(2 * x);
            if (2 * x + 1 < m[g]) f.push(2 * x + 1);
            break;
          } else {
            zmeny.push_back({j, 0});
            break;
          }
        }
      }
      if (stav) {
        for (int k = 0; k < zmeny.size(); k++) {
          a[zmeny[k].first] = zmeny[k].second;
        }
        f.push(x);
        ress.push_back(x);
      }
    }
    long long res = 0;
    for (i = 1; i < m[g]; i++) res += a[i];
    printf("%lld\n", res);
    for (i = 0; i < ress.size(); i++) {
      printf("%i ", ress[i]);
    }
    printf("\n");
  }
  return 0;
}
