#include <bits/stdc++.h>
using namespace std;
struct fast_reader {
  fast_reader &operator,(int &x) {
    scanf("%d", &x);
    return *this;
  }
  fast_reader &operator,(signed long long &x) {
    scanf(
        "%"
        "ll"
        "d",
        &x);
    return *this;
  }
  fast_reader &operator,(double &x) {
    scanf("%lf", &x);
    return *this;
  }
  fast_reader &operator,(long double &x) {
    scanf("%Lf", &x);
    return *this;
  }
  fast_reader &operator,(char &x) {
    do x = getchar();
    while (x == ' ' || x == '\n');
    return *this;
  }
  fast_reader &operator,(char *x) {
    scanf("%s", x);
    return *this;
  }
  fast_reader &operator,(string &x) {
    int c;
    do c = getchar();
    while (c == ' ' || c == '\n');
    x.clear();
    do x.push_back(c), c = getchar();
    while (c != ' ' && c != '\n' && c != EOF);
    ungetc(c, stdin);
    return *this;
  }
  fast_reader &line(string &x) {
    int c = getchar();
    x.clear();
    while (c != '\n' && c != EOF) x.push_back(c), c = getchar();
    return *this;
  }
} in;
struct fast_writer {
  fast_writer &operator,(const int x) {
    printf("%d", x);
    return *this;
  }
  fast_writer &operator,(const signed long long x) {
    printf(
        "%"
        "ll"
        "d",
        x);
    return *this;
  }
  fast_writer &operator,(const double x) {
    printf(
        "%."
        "12"
        "lf",
        x);
    return *this;
  }
  fast_writer &operator,(const long double x) {
    printf(
        "%."
        "12"
        "Lf",
        x);
    return *this;
  }
  fast_writer &operator,(const char x) {
    putchar(x);
    return *this;
  }
  fast_writer &operator,(const char *x) {
    printf("%s", x);
    return *this;
  }
  fast_writer &operator,(const string &x) { return operator,(x.c_str()); }
  fast_writer &operator-() {
    fflush(stdout);
    return *this;
  }
} out;
inline void quit() { exit(EXIT_SUCCESS); }
template <class T>
inline T sqr(T x) {
  return x * x;
}
template <class T>
inline T gcd(T a, T b) {
  T c;
  while (a) c = a, a = b % a, b = c;
  return b;
}
template <class T>
inline T lcm(T a, T b) {
  return (a / gcd(a, b)) * b;
}
template <class T>
inline T pow(T a, T n, T m) {
  T b = 1;
  while (n) {
    if (n & 1) b = (b * a) % m;
    a = (a * a) % m, n >>= 1;
  }
  return b;
}
static const signed long long MOD = (signed long long)1e9 + 7;
static const long double EPS = (long double)1e-12;
int n;
string x, y;
vector<int> ans;
int main() {
  cin >> n;
  cin >> x >> y;
  if (n == 1) {
    cout << (x == y ? 0 : -1);
    quit();
  }
  for (int i = 0; i < n; i++) {
    int p;
    for (p = 0; p < n - i; p++) {
      if (x[p] == y[i]) break;
    }
    if (p == n - i) {
      cout << -1;
      quit();
    }
    string l, r;
    l = x.substr(0, p + 1);
    r = x.substr(p + 1);
    reverse(r.begin(), r.end());
    x = r + l;
    ans.push_back(n - p - 1);
    x = x.back() + x.substr(0, n - 1);
    ans.push_back(1);
    reverse(x.begin(), x.end());
    ans.push_back(n);
  }
  cout << ans.size() << endl;
  for (int a : ans) cout << a << ' ';
  quit();
}
