#include <iostream>
#include <cstdio>
#include <vector>
using namespace std;
const int MaxN = 100;
typedef unsigned long long u64;
const int NM = 2;
const int M[NM] = {-1, 999946333};
int main()
{
//freopen("equation.in", "r", stdin);
//freopen("equation.out", "w", stdout);
int n, m;
static u64 a[NM][MaxN + 1];
cin >> n >> m;
for (int i = 0; i <= n; i++)
{
bool isNeg = false;
char c;
while (c = getchar(), !(('0' <= c && c <= '9') || c == '-'));
if (c == '-')
{
isNeg = true;
c = getchar();
}
for (int k = 0; k < NM; k++)
a[k][i] = 0;
do
{
a[0][i] = a[0][i] * 10 + (c - '0');
a[0][i] %= 0x7fffffff;
a[1][i] = (a[1][i] * 10 + (c - '0')) % M[1];
}
while (c = getchar(), '0' <= c && c <= '9');
if (isNeg)
{
if (a[0][i] != 0)
a[0][i] = 0x7fffffff - a[0][i];
if (a[1][i] != 0)
a[1][i] = M[1] - a[1][i];
}
}
vector<int> res;
for (int x = 1; x <= m; x++)
{
register u64 y;
y = 0;
for (int i = n; i >= 0; i--)
{
y = y * x + a[0][i];
y = (y & 0x7fffffff) + (y >> 31);
}
y %= 0x7fffffff;
if (y != 0)
continue;
y = 0;
for (int i = n; i >= 0; i--)
y = (y * x + a[1][i]) % M[1];
if (y != 0)
continue;
res.push_back(x);
}
printf("%d\n", (int)res.size());
for (int i = 0; i < (int)res.size(); i++)
printf("%d\n", res[i]);
return 0;
}
/**************************************************************
Problem: 2339
User: admin
Language: C++
Result: Accepted
Time:635 ms
Memory:2080 kb
****************************************************************/