#include <bits/stdc++.h>
using namespace std;
using ll = long long;
mt19937 rng(1234);
signed main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  int t;
  cin >> t;
  vector<char> pick((1 << 20) + 1);
  while (t--) {
    int h, g;
    cin >> h >> g;
    int n = (1 << h) - 1;
    vector<int> a(n);
    for (auto &e : a) cin >> e;
    auto up = [](int value, vector<int> &heap) {
      heap.push_back(value);
      int i = heap.size() - 1;
      while (i && heap[i] < heap[(i - 1) / 2]) {
        swap(heap[i], heap[(i - 1) / 2]);
        i = (i - 1) / 2;
      }
    };
    auto down = [](int idx, vector<int> &heap) {
      while (2 * idx + 2 < heap.size()) {
        if (heap[2 * idx + 1] > heap[2 * idx + 2]) {
          swap(heap[idx], heap[2 * idx + 1]);
          idx = 2 * idx + 1;
        } else {
          swap(heap[idx], heap[2 * idx + 2]);
          idx = 2 * idx + 2;
        }
      }
      heap[idx] = 0;
    };
    int bot = 1 << (g - 1);
    vector<vector<int>> que(bot);
    vector<int> heap_idx(n);
    for (int i = bot - 1, j = 0; i < n; ++i, ++j) {
      heap_idx[i] = (j < bot ? j : heap_idx[(i - 1) / 2]);
      up(a[i], que[heap_idx[i]]);
    }
    for (int i = 0; i < bot; ++i) {
      pick[que[i].front()] = true;
    }
    for (int level = g - 2; level >= 0; --level) {
      int cnt = 1 << level;
      vector<vector<int>> nxt_que(cnt);
      for (int i = 0; i < cnt; ++i) {
        int l = 2 * i;
        int r = 2 * i + 1;
        int mi = max(que[l].front(), que[r].front());
        for (auto &v : que[l]) {
          if (v > mi) up(v, nxt_que[i]);
        }
        for (auto &v : que[r]) {
          if (v > mi) up(v, nxt_que[i]);
        }
        up(a[cnt - 1 + i], nxt_que[i]);
        pick[nxt_que[i].front()] = true;
      }
      swap(que, nxt_que);
    }
    vector<int> b = a;
    ll sum = 0;
    vector<int> moves;
    for (int i = 0; i < n;) {
      if (pick[b[i]] || !b[i]) {
        pick[b[i]] = false;
        sum += b[i];
        ++i;
      } else {
        moves.push_back(i);
        down(i, b);
      }
    }
    cout << sum << "\n";
    for (auto e : moves) cout << e + 1 << " ";
    cout << "\n";
  }
}
