#include <bits/stdc++.h>
using namespace std;
inline int read() {
  int x = 0, f = 0;
  char c = getchar();
  while (c < '0' || c > '9') {
    if (c == '-') f = 1;
    c = getchar();
  }
  while (c >= '0' && c <= '9') x = x * 10 + c - '0', c = getchar();
  if (f) x = -x;
  return x;
}
int n, l, r;
int p[2005], u[2005];
char s[2005], t[2005];
bool vis[2005];
int o[6105], cnt = 0;
inline void rev(int pos) {
  if (pos <= 0 || pos > n) return;
  o[++cnt] = n - pos + 1;
  for (int i = 1; i < pos; i++) u[i + o[cnt]] = p[i];
  for (int i = pos; i <= n; i++) u[n - i + 1] = p[i];
  for (int i = 1; i <= n; i++) p[i] = u[i];
}
inline void solve(int t) {
  int j, pos, len = r - l + 1;
  rev(r + 1);
  rev(n - (r - l));
  pos = -1;
  for (j = 1; j <= n; j++) {
    if (p[j] == t) {
      pos = j;
      break;
    }
  }
  rev(pos);
  for (j = 1; j <= n; j++) {
    if (p[j] == t) {
      l = j;
      break;
    }
  }
  r = l + len;
}
int main() {
  int i, j, k, pos;
  scanf("%d", &n);
  scanf("%s", s + 1);
  scanf("%s", t + 1);
  for (i = 1; i <= n; i++) {
    for (j = 1; j <= n; j++) {
      if (vis[j]) continue;
      if (s[i] == t[j]) {
        p[i] = j;
        vis[j] = 1;
        break;
      }
    }
    if (!p[i]) {
      puts("-1");
      return 0;
    }
  }
  for (i = 1; i <= n; i++) {
    if (p[i] == 1) {
      l = r = i;
      break;
    }
  }
  if (n != 1) solve(n);
  int nl = 2, nr = n - 1;
  while (nl <= nr) {
    solve(nl);
    nl++;
    if (nl > nr) break;
    solve(nr);
    nr--;
  }
  if (!(n & 1)) rev(1);
  for (i = 1; i <= n; i++) {
    if (p[i] == 1) {
      pos = i + 1;
      break;
    }
  }
  rev(pos);
  rev(n - pos + 2);
  printf("%d\n", cnt);
  for (i = 1; i <= cnt; i++) {
    printf("%d ", o[i]);
  }
  return 0;
}
