#include <bits/stdc++.h>
using namespace std;
vector<int> ans;
int main() {
  int n;
  cin >> n;
  string s, t;
  cin >> s;
  string s0(s);
  cin >> t;
  if (n == 1) {
    cout << 0 << endl;
    return 0;
  }
  bool rev = false;
  for (int i = 0; i < n; i += 2) {
    int xpos, ypos;
    char x = t[(n - 1 + i / 2) % n], y = t[(n - 2 - i / 2) % n];
    if (rev) swap(x, y);
    if (s.find(x) == string::npos || s.find(x) >= n - i) {
      cout << -1 << "\n";
      return 0;
    }
    xpos = s.find(x);
    if (n - 1 - xpos) ans.push_back(n - 1 - xpos);
    ans.push_back(n);
    for (int j = 0; (j << 1) <= xpos; j++) {
      char tmp = s[j];
      s[j] = s[xpos - j];
      s[xpos - j] = tmp;
    }
    if (i) {
      ans.push_back(i);
      for (int j = 0; j < i; j++) s0[j] = s[n - 1 - j];
      for (int j = i; j < n; j++) s0[j] = s[j - i];
      swap(s, s0);
    }
    if (i + 1 == n) {
      rev = !rev;
      break;
    }
    if (s.rfind(y) == string::npos || s.rfind(y) < i + 1) {
      cout << -1 << "\n";
      return 0;
    }
    ypos = s.rfind(y);
    if (n - ypos) {
      ans.push_back(n - ypos);
      for (int j = 0; j < n - ypos; j++) s0[j] = s[n - 1 - j];
      for (int j = n - ypos; j < n; j++) s0[j] = s[j - (n - ypos)];
      swap(s, s0);
    }
    if (i < ypos - 1) {
      ans.push_back(ypos - 1 - i);
      for (int j = 0; j < ypos - 1 - i; j++) s0[j] = s[n - 1 - j];
      for (int j = ypos - 1 - i; j < n; j++) s0[j] = s[j - (ypos - 1 - i)];
      swap(s, s0);
    }
    rev = !rev;
  }
  if (n & 1) {
    if (!rev) {
      ans.push_back(n - n / 2 + 1);
      ans.push_back(n / 2 - 1);
    } else {
      ans.push_back(n);
      ans.push_back(n / 2 + 1);
      ans.push_back(n / 2);
    }
  } else {
    if (!rev) {
      ans.push_back(n / 2 + 1);
      ans.push_back(n - n / 2 - 1);
    } else {
      ans.push_back(n);
      ans.push_back(n - n / 2 + 1);
      ans.push_back(n / 2 - 1);
    }
  }
  cout << ans.size() << endl;
  for (int i = 0; i < ans.size(); i++) cout << ans[i] << " ";
  cout << endl;
}
