#include <bits/stdc++.h>
#pragma GCC optimize("O3")
using namespace std;
using ll = long long;
using P = pair<ll, ll>;
template <class T>
using V = vector<T>;
const ll inf = (1e18);
const ll mod = 1000000007;
ll GCD(ll a, ll b) { return b ? GCD(b, a % b) : a; }
ll LCM(ll c, ll d) { return c / GCD(c, d) * d; }
struct __INIT {
  __INIT() {
    cin.tie(0);
    ios::sync_with_stdio(false);
    cout << fixed << setprecision(15);
  }
} __init;
template <class T>
bool chmax(T &a, const T &b) {
  if (a < b) {
    a = b;
    return 1;
  }
  return 0;
}
template <class T>
bool chmin(T &a, const T &b) {
  if (a > b) {
    a = b;
    return 1;
  }
  return 0;
}
void pitsu() {
  int n;
  cin >> n;
  string s, t;
  cin >> s >> t;
  V<int> a(n), b(n);
  for (int i = 0; i < n; i++) {
    a[i] = s[i] - '0';
    b[i] = t[i] - '0';
  }
  int m = n - 1;
  V<int> ans;
  bool rev = true;
  int l = 0, r = n - 1;
  int cnt = 0;
  while (m >= 0) {
    if (rev) {
      if ((a[r] ^ ((cnt) % 2) == b[m])) {
        r--;
        m--;
        continue;
      }
    } else {
      if ((a[l] ^ ((cnt) % 2)) == b[m]) {
        l++;
        m--;
        continue;
      }
    }
    if (a[l] != a[r]) {
      ans.push_back(1);
    }
    ans.push_back(m + 1);
    cnt++;
    if (rev)
      l++;
    else
      r--;
    rev ^= 1;
    m--;
  }
  cout << ans.size() << " ";
  for (int i = 0; i < ans.size(); i++) {
    cout << ans[i] << " ";
  }
  cout << "\n";
}
int main() {
  int t;
  cin >> t;
  while (t--) pitsu();
}
