#include <bits/stdc++.h>
using namespace std;
const int inf = 1e9 + 7;
const long long linf = 1ll * inf * inf;
const int N = 2000 + 7;
const int M = 20;
const int multipleTest = 0;
int n;
int nxt(int x, int step = 1) { return (x + step) % n; }
int prv(int x) { return (x + n - 1) % n; }
struct node {
  int fir, sec;
  int len;
  bool flip;
  node(int _f, int _s, int _len, bool _flip) {
    fir = _f;
    sec = _s;
    len = _len;
    flip = _flip;
  }
  node rev() { return node(sec, fir, len, !flip); }
  bool isBefore(node b) {
    if (!b.flip) {
      return !flip && nxt(sec) == b.fir;
    } else {
      return flip && prv(sec) == b.fir;
    }
  }
};
string s, t;
vector<int> L[N];
int cnt[N];
vector<int> ans;
node merge(node a, node b) {
  assert(a.flip == b.flip);
  return node(a.fir, b.sec, a.len + b.len, a.flip);
}
vector<node> all;
void transform(int i) {
  int x = 0;
  int m = (int)(all).size();
  for (int j = i; j < m; ++j) {
    x += all[j].len;
  }
  ans.push_back(x);
  vector<node> cur;
  for (int j = m - 1; j >= i; --j) cur.push_back(all[j].rev());
  if (i == 0) {
    all.clear();
    for (int j = (0), _b = ((int)(cur).size()); j < _b; ++j)
      all.push_back(cur[j]);
    return;
  }
  if (!cur.empty() && cur.back().isBefore(all[0]))
    cur.back() = ::merge(cur.back(), all[0]);
  else
    cur.push_back(all[0]);
  cur.insert(cur.end(), all.begin() + 1, all.begin() + i);
  all.clear();
  for (int j = (0), _b = ((int)(cur).size()); j < _b; ++j)
    all.push_back(cur[j]);
}
void solve() {
  cin >> n >> s >> t;
  for (char c : s) cnt[c]++;
  for (char c : t) cnt[c]--;
  for (int x = 0; x < N; ++x)
    if (cnt[x]) {
      puts("-1");
      return;
    }
  for (int i = (0), _b = ((int)(t).size()); i < _b; ++i) {
    L[t[i]].push_back(i);
  }
  for (int x = (0), _b = (N); x < _b; ++x) reverse(L[x].begin(), L[x].end());
  for (int i = (0), _b = (n); i < _b; ++i) {
    int pos = L[s[i]].back();
    L[s[i]].pop_back();
    all.push_back(node(pos, pos, 1, false));
  }
  while (all.size() > 1) {
    int m = all.size();
    bool found = false;
    for (int i = 0; i + 1 < m; ++i) {
      if (all[i].isBefore(all[m - 1].rev())) {
        ::transform(i);
        ::transform(m - 1 - i);
        found = true;
        break;
      }
    }
    if (found) continue;
    for (int i = 0; i + 1 < m; ++i) {
      if (all[i].rev().isBefore(all[m - 1].rev())) {
        ::transform(i + 1);
        ::transform(m - 1);
        found = true;
        break;
      }
    }
  }
  if (all[0].flip) ::transform(0);
  for (int i = (0), _b = (all[0].fir); i < _b; ++i) ans.push_back(1);
  cout << ans.size() << '\n';
  for (int x : ans) {
    cout << x << ' ';
  }
}
int main() {
  int Test = 1;
  if (multipleTest) {
    cin >> Test;
  }
  for (int i = 0; i < Test; ++i) {
    solve();
  }
}
