#include <bits/stdc++.h>
using namespace std;
int Add(int &a, int b) { a = (a + b) % 1000000007; }
int Min(int &a, int b) { a = (a + 1000000007 - b) % 1000000007; }
int Mul(int &a, int b) { a = (long long)a * b % 1000000007; }
long long gcd(long long a, long long b) {
  if (!b) return a;
  return gcd(b, a % b);
}
long long pow(long long a, long long b) {
  long long res(1);
  while (b) {
    if (b & 1) res = res * a % 1000000007;
    a = a * a % 1000000007;
    b >>= 1;
  }
  return res;
}
long long powM(long long a, long long b, long long mod) {
  long long res(1);
  while (b) {
    if (b & 1) res = res * a % mod;
    a = a * a % mod;
    b >>= 1;
  }
  return res;
}
const int infi = 2147483647;
const long long infl = 9223372036854775807;
int n, m, k, T;
char s[2010], t[2010], c[2010];
int cnt[26];
vector<int> res;
void shift(int p) {
  for (int i = 1; i <= (p); ++i) c[i] = s[n - i + 1];
  for (int i = (p + 1); i <= (n); ++i) c[i] = s[i - p];
  for (int i = 1; i <= (n); ++i) s[i] = c[i];
}
int main() {
  scanf("%d", &n);
  scanf("%s %s", s + 1, t + 1);
  for (int i = 1; i <= (n); ++i) cnt[s[i] - 'a']++, cnt[t[i] - 'a']--;
  for (int i = 0; i < (26); ++i)
    if (cnt[i]) {
      puts("-1");
      return 0;
    }
  int i = 1;
  while (s[i] != t[1]) i++;
  if (i < n) res.push_back(n - i), shift(n - i);
  int k = 1;
  while (k < n) {
    i = 1;
    while (s[i] != t[k + 1]) i++;
    res.push_back(n - i), shift(n - i);
    res.push_back(1), shift(1);
    res.push_back(n), shift(n);
    k++;
  }
  printf("%d", (res.size())), putchar('\n');
  for (int i = 0; i < (res.size()); ++i) {
    printf("%d", (res.at(i))),
        i + 1 < res.size() ? putchar(' ') : putchar('\n');
  }
  return 0;
}
