/// ,-----v-----.
/// / \
/// / _ _ \
/// | / \ / \ |
/// | | | | | |
/// | | | | | |
/// | \ / \ / |
/// | ' ' |
/// / \
/// | ( O ) ( O ) |
/// | ♥ |
/// | \_/ |
/// \ /
/// '--.___________.--'
/// / \
/// / \
/// / /| (✿) |\ \
/// / / | | \ \
/// / / |_______| \ \
/// |__/ | | | \__|
/// | | |
/// - -
#include <bits/stdc++.h>
using namespace std;
#define Task "Test"
#define int long long
#define el '\n'
#define cnt_bit_1 __builtin_popcountll
#define float double
#define IO freopen(Task".inp","r",stdin); freopen(Task".out","w",stdout);
#define pii pair<int,int>
#define fi first
#define se second
#define pb push_back
const int N=2e5+5;
const int INF=1e18;
const int MOD=1e9+7;
int n , m;
vector<int> prefix_function(vector<int> s)
{
int n = s.size();
vector<int> pi(n , 0);
for(int i = 1; i < n; i++)
{
int j = pi[i - 1];
while (j > 0 && s[i] != s[j]) j = pi[j - 1];
if(s[i] == s[j]) j++;
pi[i] = j;
}
return pi;
}
signed main()
{
ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
//IO
cin >> n >> m;
vector<int> t(n + 1) , p(m + 1);
for(int i = 1; i <= n; i++) cin >> t[i];
for(int i = 1; i <= m; i++) cin >> p[i];
if(m == 1)
{
cout << n << el;
for(int i = 1; i <= n; i++) cout << i << ' ';
return 0;
}
vector<int> a , b;
for(int i = 1; i < n; i++) a.pb(t[i + 1] - t[i]);
for(int i = 1; i < m; i++) b.pb(p[i + 1] - p[i]);
vector<int> pi = prefix_function(b);
vector<int> ans;
int j = 0;
for(int i = 0; i < a.size(); i++)
{
while(j > 0 && a[i] != b[j]) j = pi[j - 1];
if(a[i] == b[j]) j++;
if(j == b.size())
{
ans.pb(i - b.size() + 2);
j = pi[j - 1];
}
}
cout << ans.size() << el;
for(int i = 0; i < ans.size(); i++) cout << ans[i] << ' ';
return 0;
}
Ly8vICAgICAgICAgICAgLC0tLS0tdi0tLS0tLgovLy8gICAgICAgICAgIC8gICAgICAgICAgICAgXAovLy8gICAgICAgICAgLyAgIF8gICAgICAgXyAgIFwKLy8vICAgICAgICAgfCAgIC8gXCAgICAgLyBcICAgfAovLy8gICAgICAgICB8ICB8ICAgfCAgIHwgICB8ICB8Ci8vLyAgICAgICAgIHwgIHwgICB8ICAgfCAgIHwgIHwKLy8vICAgICAgICAgfCAgIFwgLyAgICAgXCAvICAgfAovLy8gICAgICAgICB8ICAgICcgICAgICAgJyAgICB8Ci8vLyAgICAgICAgLyAgICAgICAgICAgICAgICAgICBcCi8vLyAgICAgICB8ICAgKCBPICkgICAgICggTyApICAgfAovLy8gICAgICAgfCAgICAgICAgICDimaUgICAgICAgICAgfAovLy8gICAgICAgfCAgICAgICAgIFxfLyAgICAgICAgIHwKLy8vICAgICAgICBcICAgICAgICAgICAgICAgICAgIC8KLy8vICAgICAgICAgJy0tLl9fX19fX19fX19fLi0tJwovLy8gICAgICAgICAgICAvICAgICAgICAgICBcCi8vLyAgICAgICAgICAgLyAgICAgICAgICAgICBcCi8vLyAgICAgICAgICAvICAvfCAgKOKcvykgIHxcICBcCi8vLyAgICAgICAgIC8gIC8gfCAgICAgICB8IFwgIFwKLy8vICAgICAgICAvICAvICB8X19fX19fX3wgIFwgIFwKLy8vICAgICAgIHxfXy8gICAgfCAgfCAgfCAgICBcX198Ci8vLyAgICAgICAgICAgICAgIHwgIHwgIHwKLy8vICAgICAgICAgICAgICAgIC0gICAtCgojaW5jbHVkZSA8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCiNkZWZpbmUgVGFzayAiVGVzdCIKI2RlZmluZSBpbnQgbG9uZyBsb25nCiNkZWZpbmUgZWwgJ1xuJwojZGVmaW5lIGNudF9iaXRfMSBfX2J1aWx0aW5fcG9wY291bnRsbAojZGVmaW5lIGZsb2F0IGRvdWJsZQojZGVmaW5lIElPIGZyZW9wZW4oVGFzayIuaW5wIiwiciIsc3RkaW4pOyBmcmVvcGVuKFRhc2siLm91dCIsInciLHN0ZG91dCk7CiNkZWZpbmUgcGlpIHBhaXI8aW50LGludD4KI2RlZmluZSBmaSBmaXJzdAojZGVmaW5lIHNlIHNlY29uZAojZGVmaW5lIHBiIHB1c2hfYmFjawoKY29uc3QgaW50IE49MmU1KzU7CmNvbnN0IGludCBJTkY9MWUxODsKY29uc3QgaW50IE1PRD0xZTkrNzsKCmludCBuICwgbTsKCnZlY3RvcjxpbnQ+IHByZWZpeF9mdW5jdGlvbih2ZWN0b3I8aW50PiBzKQp7CiAgICBpbnQgbiA9IHMuc2l6ZSgpOwogICAgdmVjdG9yPGludD4gcGkobiAsIDApOwoKICAgIGZvcihpbnQgaSA9IDE7IGkgPCBuOyBpKyspCiAgICB7CiAgICAgICAgaW50IGogPSBwaVtpIC0gMV07CiAgICAgICAgd2hpbGUgKGogPiAwICYmIHNbaV0gIT0gc1tqXSkgaiA9IHBpW2ogLSAxXTsKICAgICAgICBpZihzW2ldID09IHNbal0pIGorKzsKICAgICAgICBwaVtpXSA9IGo7CiAgICB9CiAgICByZXR1cm4gcGk7Cn0KCnNpZ25lZCBtYWluKCkKewogICAgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbygwKTsgY2luLnRpZSgwKTsgY291dC50aWUoMCk7CiAgICAvL0lPCgogICAgY2luID4+IG4gPj4gbTsKCiAgICB2ZWN0b3I8aW50PiB0KG4gKyAxKSAsIHAobSArIDEpOwogICAgZm9yKGludCBpID0gMTsgaSA8PSBuOyBpKyspIGNpbiA+PiB0W2ldOwogICAgZm9yKGludCBpID0gMTsgaSA8PSBtOyBpKyspIGNpbiA+PiBwW2ldOwoKICAgIGlmKG0gPT0gMSkKICAgIHsKICAgICAgICBjb3V0IDw8IG4gPDwgZWw7CiAgICAgICAgZm9yKGludCBpID0gMTsgaSA8PSBuOyBpKyspIGNvdXQgPDwgaSA8PCAnICc7CiAgICAgICAgcmV0dXJuIDA7CiAgICB9CgogICAgdmVjdG9yPGludD4gYSAsIGI7CiAgICBmb3IoaW50IGkgPSAxOyBpIDwgbjsgaSsrKSBhLnBiKHRbaSArIDFdIC0gdFtpXSk7CiAgICBmb3IoaW50IGkgPSAxOyBpIDwgbTsgaSsrKSBiLnBiKHBbaSArIDFdIC0gcFtpXSk7CgogICAgdmVjdG9yPGludD4gcGkgPSBwcmVmaXhfZnVuY3Rpb24oYik7CiAgICB2ZWN0b3I8aW50PiBhbnM7CgogICAgaW50IGogPSAwOwogICAgZm9yKGludCBpID0gMDsgaSA8IGEuc2l6ZSgpOyBpKyspCiAgICB7CiAgICAgICAgd2hpbGUoaiA+IDAgJiYgYVtpXSAhPSBiW2pdKSBqID0gcGlbaiAtIDFdOwogICAgICAgIGlmKGFbaV0gPT0gYltqXSkgaisrOwogICAgICAgIGlmKGogPT0gYi5zaXplKCkpCiAgICAgICAgewogICAgICAgICAgICBhbnMucGIoaSAtIGIuc2l6ZSgpICsgMik7CiAgICAgICAgICAgIGogPSBwaVtqIC0gMV07CiAgICAgICAgfQogICAgfQoKICAgIGNvdXQgPDwgYW5zLnNpemUoKSA8PCBlbDsKICAgIGZvcihpbnQgaSA9IDA7IGkgPCBhbnMuc2l6ZSgpOyBpKyspIGNvdXQgPDwgYW5zW2ldIDw8ICcgJzsKCiAgICByZXR1cm4gMDsKfQo=