#include <bits/stdc++.h>
#pragma GCC optimize("omit-frame-pointer")
#pragma GCC optimize("unroll-loops")
const int MAXINT = 2147483640;
const long long MAXLL = 9223372036854775800LL;
const long long MAXN = 1000000;
const double pi = 3.1415926535897932384626433832795;
using namespace std;
int n;
int x1[300000];
int x2[300000];
int x3[300000];
int pos[300000];
int f[300000];
vector<int> ans;
vector<int> v[300000];
void rev(int xx) {
  if (xx == 0) return;
  ans.push_back(xx);
  xx = n - xx + 1;
  for (int i = 1; i <= n; i++) x2[i] = x1[i];
  int now = 1;
  for (int i = n; i >= xx; i--) x3[now++] = x1[i];
  for (int i = 1; i < xx; i++) x3[now++] = x1[i];
  for (int i = 1; i <= n; i++) x1[i] = x3[i];
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  srand(time(0));
  string s1, s2;
  cin >> n;
  cin >> s1 >> s2;
  for (int i = 0; i < s2.size(); i++) {
    v[s2[i]].push_back(i + 1);
  }
  for (int i = 'a'; i <= 'z'; i++) reverse(v[i].begin(), v[i].end());
  for (int i = 0; i < s1.size(); i++) f[s1[i]]++;
  for (int i = 0; i < s1.size(); i++) {
    if (f[s1[i]] != v[s1[i]].size()) return cout << -1 << endl, 0;
  }
  for (int i = 0; i < s1.size(); i++) {
    x1[i + 1] = v[s1[i]][v[s1[i]].size() - 1];
    v[s1[i]].pop_back();
  }
  for (int i = 1; i <= n; i++) pos[x1[i]] = i;
  int kek = pos[1];
  rev(n - kek);
  rev(1);
  for (int i = 2; i <= n; i++) {
    rev(n);
    for (int j = 1; j <= n; j++) pos[x1[j]] = j;
    kek = pos[i];
    rev(n - kek);
    rev(1);
  }
  rev(n);
  cout << ans.size() << endl;
  for (int i = 0; i < ans.size(); i++) cout << ans[i] << " ";
  cout << endl;
  return 0;
}
