#include <bits/stdc++.h>
using namespace std;
const long long inf = 9.2e18;
const int maxn = 2e3 + 70;
const int INF = 2.1e9;
const int maxm = 1e6 + 70;
const int MOD = 1e9 + 7;
const double eps = 1e-7;
const double PI = acos(-1.0);
int n, m, k;
int vis[maxn];
string s, t;
vector<int> V;
void shift(int x) {
  vector<int> V1;
  for (int i = n - 1; i >= n - x; i--) V1.push_back(V[i]);
  for (int i = 0; i < n - x; i++) V1.push_back(V[i]);
  V = V1;
  printf("%d ", x);
}
multiset<char> S, S1;
void solve() {
  S.clear();
  S1.clear();
  for (int i = 0; i < n; i++) S.insert(s[i]), S1.insert(t[i]);
  if (S != S1) {
    cout << -1 << endl;
    return;
  }
  V.clear();
  memset(vis, 0, sizeof(vis));
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < n; j++) {
      if (!vis[j] && s[i] == t[j]) {
        vis[j] = 1;
        V.push_back(j);
        break;
      }
    }
  }
  printf("%d\n", 3 * (n - 1) + 1);
  for (int i = 0; i < n; i++)
    if (V[i] == 0) {
      shift(n - (i + 1));
      break;
    }
  for (int i = 1; i <= n - 1; i++) {
    int p = 0;
    while (V[p] != i) p++;
    shift(n - (p + 1));
    shift(1);
    shift(n);
  }
  printf("\n");
}
int main() {
  while (cin >> n) {
    cin >> s >> t;
    solve();
  }
  return 0;
}
