#include <bits/stdc++.h>
using namespace std;
const unsigned long long base = 133;
unsigned long long hash1[200005][26], hash2[200005][26], Pow[200005];
int n, m;
char str1[200005], str2[200005];
int main() {
  scanf("%d%d", &n, &m);
  scanf("%s%s", str1 + 1, str2 + 1);
  Pow[0] = 1;
  for (int i = 1; i <= n; i++) {
    Pow[i] = Pow[i - 1] * base;
  }
  for (int i = 0; i < 26; i++) {
    for (int j = 1; j <= n; j++) {
      hash1[j][i] = hash1[j - 1][i] * base + (str1[j] - 'a' == i);
    }
  }
  for (int i = 0; i < 26; i++) {
    for (int j = 1; j <= m; j++) {
      hash2[j][i] = hash2[j - 1][i] * base + (str2[j] - 'a' == i);
    }
  }
  vector<int> vec;
  for (int i = 1; i <= n - m + 1; i++) {
    int cnt = 0;
    for (int x = 0; x < 26; x++) {
      if (cnt != x) break;
      for (int y = 0; y < 26; y++) {
        if (hash2[m][x] == hash1[i + m - 1][y] - hash1[i - 1][y] * Pow[m]) {
          if (hash2[m][y] == hash1[i + m - 1][x] - hash1[i - 1][x] * Pow[m]) {
            cnt++;
            break;
          }
        }
      }
    }
    if (cnt == 26) vec.push_back(i);
  }
  int sz = vec.size();
  printf("%d\n", sz);
  for (int i = 0; i < sz; i++) {
    printf("%d ", vec[i]);
  }
  return 0;
}
