#include <bits/stdc++.h>
using namespace std;
const int N = 2 * 1000 * 100 + 10, Z = 26, P = 2, mod = 1e9 + 9;
int pw[N], wp[N], n, m, tar[Z], hsh[N][Z];
string s, t;
long long Pow(long long a, long long b) {
  return b ? (b & 1 ? a : 1) % mod * Pow(a * a % mod, b >> 1) % mod : 1;
}
int add(int a, int b) {
  a += b;
  a += (a < 0) * mod;
  a -= (a >= mod) * mod;
  return a;
}
int mul(int a, int b) { return 1LL * a * b % mod; }
int main() {
  ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
  pw[0] = 1;
  for (int i = 1; i < N; i++) pw[i] = mul(pw[i - 1], P);
  wp[N - 1] = Pow(pw[N - 1], mod - 2);
  for (int i = N - 2; i >= 0; i--) wp[i] = mul(wp[i + 1], P);
  cin >> n >> m >> s >> t;
  for (int i = 0; i < m; i++)
    for (int j = 0; j < Z; j++)
      tar[j] = add(tar[j], mul(pw[i], t[i] - 'a' == j));
  vector<pair<int, int>> targ;
  for (int i = 0; i < Z; i++) targ.push_back({tar[i], i});
  sort(targ.begin(), targ.end());
  for (int i = 1; i <= n; i++)
    for (int j = 0; j < Z; j++)
      hsh[i][j] = add(hsh[i - 1][j], mul(pw[i - 1], s[i - 1] - 'a' == j));
  vector<int> o;
  for (int i = 0; i + m <= n; i++) {
    bool res = true;
    vector<pair<int, int>> me;
    for (int j = 0; j < Z; j++) {
      int val = mul(add(hsh[i + m][j], -hsh[i][j]), wp[i]);
      me.push_back({val, j});
    }
    sort(me.begin(), me.end());
    for (int i = 0; i < Z; i++) res &= me[i].first == targ[i].first;
    set<pair<int, int>> st;
    set<int> NO;
    for (int i = 0; i < Z; i++) {
      if (me[i].first == 0) continue;
      if (me[i].second != targ[i].second)
        if (me[i].second < targ[i].second)
          st.insert({me[i].second, targ[i].second});
        else
          st.insert({targ[i].second, me[i].second});
      else
        NO.insert(me[i].second);
    }
    set<int> F, S;
    for (auto it : st) F.insert(it.first), S.insert(it.second);
    res &= (int)(F.size()) == (int)(st.size());
    res &= (int)(S.size()) == (int)(st.size());
    for (auto it : st) S.insert(it.first);
    res &= (int)(S.size()) == ((int)(st.size()) * 2);
    for (auto it : S) res &= !NO.count(it);
    if (res) o.push_back(i + 1);
  }
  cout << (int)(o.size()) << '\n';
  for (auto i : o) cout << i << ' ';
  cout << '\n';
  return 0;
}
