#include <bits/stdc++.h>
using namespace std;
const long long M = 1000000000000000003LL;
int n, m;
long long pow2[262144];
char S[262144];
char T[262144];
long long hS[262144][26];
long long hT[262144][26];
long long curh[26];
vector<int> ans;
bool v[26];
inline long long mulmod(long long x, long long y, long long mod) {
  return (x * y) - mod * (long long)((long double)x * y / mod);
}
bool check(long long a[26], long long b[26]) {
  memset(v, false, sizeof v);
  for (int i = 0; i < 26; ++i) {
    if (a[i] == 0) continue;
    if (v[i]) continue;
    if (a[i] == b[i]) {
      v[i] = true;
      continue;
    }
    for (int j = 0; j < 26; ++j)
      if (a[i] == b[j]) {
        if (v[j]) return false;
        if (b[i] == a[j]) {
          v[j] = true;
          v[i] = true;
          break;
        } else
          return false;
      }
    if (!v[i]) return false;
  }
  return true;
}
int main() {
  pow2[0] = 1;
  for (int i = 1; i < 262144; ++i) pow2[i] = pow2[i - 1] * 2ll % M;
  scanf("%d%d", &n, &m);
  scanf("%s", S + 1);
  scanf("%s", T + 1);
  for (int i = 1; i <= m; ++i) {
    for (int j = 0; j < 26; ++j) hT[i][j] = hT[i - 1][j] * 2ll % M;
    (hT[i][T[i] - 97] += 1ll) %= M;
  }
  for (int i = 1; i <= n; ++i) {
    for (int j = 0; j < 26; ++j) hS[i][j] = hS[i - 1][j] * 2ll % M;
    (hS[i][S[i] - 97] += 1ll) %= M;
  }
  for (int i = m; i <= n; ++i) {
    for (int j = 0; j < 26; ++j) {
      curh[j] = (hS[i][j] - mulmod(hS[i - m][j], pow2[m], M)) % M;
      if (curh[j] < 0) curh[j] += M;
    }
    if (check(hT[m], curh)) ans.push_back(i - m + 1);
  }
  int sz = ans.size();
  printf("%d\n", sz);
  for (int i = 0; i < sz; ++i) {
    printf("%d", ans[i]);
    if (i + 1 < sz)
      printf(" ");
    else
      printf("\n");
  }
  return 0;
}
