#include <bits/stdc++.h>
using namespace std;
long long int t, h, g, t1, t2, counter;
vector<long long int> a(4000006);
vector<long long int> ans;
long long int f(long long int ind) {
  long long int l = 2 * ind, r = 2 * ind + 1;
  if (a[l] == 0 && a[r] == 0) {
    if (ind > t2) {
      a[ind] = 0;
      return 1;
    } else {
      return 0;
    }
  }
  long long int stat;
  if (a[l] > a[r]) {
    long long int temp = a[l];
    stat = f(l);
    if (stat == 1) a[ind] = temp;
  } else {
    long long int temp = a[r];
    stat = f(r);
    if (stat == 1) a[ind] = temp;
  }
  return stat;
}
void dfs(long long int ind) {
  if (a[ind] == 0) return;
  while (counter < t1 - t2) {
    long long int stat = f(ind);
    if (stat == 0) {
      dfs(2 * ind);
      dfs(2 * ind + 1);
      return;
    } else {
      ans.push_back(ind);
      counter++;
    }
  }
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
  cin >> t;
  while (t--) {
    ans.clear();
    counter = 0;
    cin >> h >> g;
    t1 = (long long int)pow(2, h) - 1;
    t2 = (long long int)pow(2, g) - 1;
    for (long long int i = 1; i <= t1; i++) {
      cin >> a[i];
    }
    long long int sum = 0;
    long long int ind = 1;
    dfs(1);
    for (long long int i = 1; i <= t2; i++) {
      sum += a[i];
    }
    cout << sum << endl;
    for (long long int i = 0; i < ans.size(); i++) {
      cout << ans[i] << " ";
    }
    cout << endl;
    fill(a.begin(), a.begin() + t1 + 1, 0);
  }
}
