#include <bits/stdc++.h>
using namespace std;
const int inf = 1e9 + 9;
const long long int MOD = 1e9 + 696969;
const long long INF = 1e18 + 3;
const int mod = 1e9 + 7;
const int maxn = 6110;
int n;
string s1, s2;
bool used[maxn];
pair<int, int> tab[maxn];
int DL = 0;
pair<int, int> NEWTAB[maxn];
vector<int> res;
void shift(int x) {
  res.push_back(x);
  x = n - x + 1;
  DL = 0;
  for (int i = n; i >= x; --i) NEWTAB[++DL] = tab[i];
  for (int i = (1); i <= (x - 1); ++i) NEWTAB[++DL] = tab[i];
  for (int i = (1); i <= (n); ++i) tab[i] = NEWTAB[i];
}
pair<int, int> fixed;
int ILE = 1;
bool check() {
  for (int i = 1; i <= n; ++i)
    if (tab[i].first != i - 1) return 0;
  return 1;
}
bool spoko[maxn];
int main() {
  srand(time(0));
  ios_base::sync_with_stdio(false);
  cin >> n >> s1 >> s2;
  for (int i = 1; i <= n; ++i) {
    bool ok = 0;
    for (int j = 1; j <= n; ++j) {
      if (ok) break;
      if (tab[j].first != 0) continue;
      if (s2[i - 1] == s1[j - 1]) {
        ok = 1;
        tab[j].first = i;
        break;
      }
    }
    if (!ok) {
      cout << -1;
      exit(0);
    };
  }
  if (n == 1) {
    cout << "0\n";
    exit(0);
  };
  for (int i = (1); i <= (n); ++i) tab[i].second = 0;
  for (int i = (1); i <= (n); ++i) tab[i].first--;
  if (tab[1].first != 0) {
    for (int i = 2; i <= n; ++i)
      if (tab[i].first == 0) {
        if (i != n) shift(n - i);
        shift(n);
      }
  }
  tab[1].second = 1;
  spoko[0] = 1;
  while (ILE < n) {
    if (tab[1].second == 1) {
      int key = (tab[1].first + n - 1) % n;
      if (spoko[key]) key = (tab[1].first + 1) % n;
      assert(!spoko[key]);
      for (int i = (1); i <= (n); ++i)
        if (tab[i].first == key) {
          ++ILE;
          spoko[key] = 1;
          tab[i].second = 1;
          shift(n - i + 1);
          break;
        }
    } else if (tab[n].second == 1) {
      int wh = n;
      while (tab[wh - 1].second == 1) --wh;
      shift(n - wh + 1);
    } else {
      int wh = n;
      while (tab[wh - 1].second == 0) --wh;
      shift(n - wh + 1);
    }
  }
  for (int i = 1; i <= n; ++i) {
    if (tab[i].first == 0) {
      if (i < n) {
        if (tab[i + 1].first != 1) shift(n);
      } else {
        if (tab[1].first != 1) shift(n);
      }
      break;
    }
  }
  if (!check()) {
    for (int i = 2; i <= n; ++i)
      if (tab[i].first == 0) {
        shift(n - i + 1);
        shift(n - (n - i + 1));
        break;
      }
    if (!check()) shift(n);
    assert(check());
  }
  assert((int)res.size() <= 6100);
  cout << (int)res.size() << "\n";
  for (auto u : res) cout << u << ' ';
}
