#include #include using namespace std; using namespace atcoder; using mint = modint1000000007; #define ll long long template T eval(vector f, T v) { T res = 0; for (int i = (int)f.size()-1; i >= 0; i--) { res *= v; res += f[i]; } return res; } template vector diff(vector f) { int n = (int)f.size(); vector res(n-1, 0); for (int i = 1; i < n; i++) res[i-1] = f[i] * i; return res; } template vector integral(vector f) { int n = (int)f.size(); vector res(n+1, 0); for (int i = 0; i < n; i++) res[i+1] = f[i] / (i+1); return res; } template vector multiply(vector f, vector g) { int n = (int)f.size(); int m = (int)g.size(); vector res(n+m-1, 0); for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { res[i+j] += f[i] * g[j]; } } return res; } // (quotient, remainder) template pair, vector> divide(vector f, vector g) { int n = (int)f.size(); int m = (int)g.size(); vector res(n, 0); for (int i = n-1; i >= m-1; i--) { res[i] = f[i]/g[m-1]; for (int j = m-1; j >= 0; j--) { f[i-(m-1-j)] -= res[i]*g[j]; } } int l = 0; for (int i = 0; i < n; i++) { if (f[i].val() != 0) l = i; } f.resize(l+1); return make_pair(res, f); } int main() { ios::sync_with_stdio(0); cin.tie(0); int D; cin >> D; vector a(D+1); for (int i=0;i> a[i]; vector f(D+1); for (int i=0;i g = {0, -1, 0, 1}; auto h = divide(f, g).second; cout << h.size()-1 << "\n"; for (int i=0;i= 5e8) { cout << h[i].val()-(1e9+7); } else { cout << h[i].val(); } if (i != h.size()-1) cout << " "; else cout << "\n"; } return 0; }