#include <bits/stdc++.h>
using namespace std;
int n, k;
vector<int> v, ans;
int chk[1 << 21];
vector<int> dfs(int a) {
  vector<int> res;
  if (a >= (1 << n)) return res;
  vector<int> v1 = dfs(2 * a);
  vector<int> v2 = dfs(2 * a + 1);
  v1.push_back(987654321);
  v2.push_back(987654321);
  int M = max(ans[2 * a], ans[2 * a + 1]);
  int a1 = v1.size();
  int a2 = v2.size();
  int i, j = 0;
  for (int i = 0, j = 0; i < a1 && j < a2;) {
    if (v1[i] < v2[j]) {
      if (v1[i] > M) res.push_back(v1[i]);
      i++;
    } else {
      if (v2[j] > M) res.push_back(v2[j]);
      j++;
    }
  }
  res.pop_back();
  res.push_back(v[a]);
  if (a >= (1 << k))
    ans[a] = 0;
  else
    ans[a] = res[0];
  return res;
}
int main() {
  int Tc;
  scanf("%d", &Tc);
  for (int tc = 1; tc <= Tc; tc++) {
    scanf("%d%d", &n, &k);
    v.clear();
    ans.clear();
    v.resize((1 << (n + 1)) + 5);
    ans.resize((1 << (n + 1)) + 5);
    for (int i = 0; i < (int)ans.size(); i++) ans[i] = 0;
    for (int i = 1; i <= (1 << n) - 1; i++) scanf("%d", &v[i]);
    dfs(1);
    long long minsum = 0;
    for (int i = 1; i <= (1 << k) - 1; i++) {
      minsum += ans[i];
      chk[ans[i]] = tc;
    }
    printf("%lld\n", minsum);
    int cnt = 0;
    for (int i = (1 << n) - 1; i >= 1; i--)
      if (chk[v[i]] != tc) printf("%d ", i);
    printf("\n");
  }
  return 0;
}
