#include <cstdio>
using namespace std;
const int MAXN = 500005;
long long v[MAXN];
int n;
int prefix[MAXN];
void citire()
{
freopen("reguli.in","r",stdin);
freopen("reguli.out","w",stdout);
scanf("%d",&n);
for (int i = 1;i <= n;++i)
{
scanf("%lld",&v[i]);
v[i - 1] = v[i] - v[i - 1];
}
--n;
}
void creare_prefix()
{
int k = 0;
prefix[1] = 0;
for (int i = 2;i <= n;++i)
{
while(k > 0 && v[k + 1] != v[i])
k = prefix[k];
if (v[k + 1] == v[i])
++k;
prefix[i] = k;
}
}
int l;
//sufix[i] - adevarat daca sufixul de lungime i este si prefix
bool sufix[MAXN];
void calculare_sufix()
{
for (int k = n;k != 0;k = prefix[k])
sufix[k] = true;
}
bool ok()
{
int c = n / l;
int r = n % l;
int a = n - r;
if (prefix[a] == 0)
return false;
int b = n - r - prefix[n - r];
if (a % b != 0)
return false;
if (a / b != c)
return false;
if (!sufix[r])
return false;
return true;
}
void prelucrare()
{
l = 1;
while(!ok())
++l;
}
void afisare()
{
printf("%d\n", l);
for (int i = 1;i <= l;++i)
printf("%lld\n",v[i]);
}
int main()
{
citire();
creare_prefix();
calculare_sufix();
prelucrare();
afisare();
return 0;
}