
#include <bits/stdc++.h>
#define ll uint64_t
#define ui uint32_t
using namespace std;
uint32_t get(int x);
uint64_t query(int l, int r);
int p; ui mn;
vector<int> q;
void mix(int l1, int r1, int l2, int r2) {
vector<int> nw; nw.clear();
for (int i = l1; i <= r1; i++) nw.push_back(q[i]);
for (int i = l2; i <= r2; i++) nw.push_back(q[i]); swap(q, nw); nw.clear();
}
void dfs() {
if (q.size() == 1) {
p = q[0]; mn = get(p);
} else if (q.size() == 2) {
ui g0 = get(q[0]), g1 = get(q[1]);
if (g0 < g1) p = q[0], mn = g0; else p = q[1], mn = g1;
} else {
int r = q.size();
int m1 = r / 3, m2 = r - r / 3 - 1; r--;
if (m1 > m2 || !m1 || m2 == r) exit(1);
long long x1 = (long long)query(q[0], q[m2]) - (long long)query(q[0], q[m1 - 1]);
long long x2 = (long long)query(q[m1], q[r]) - (long long)query(q[m2 + 1], q[r]);
if (x1 == x2) mix(0, m1 - 1, m2 + 1, r);
else if (x1 > x2) mix(m1, m2, m2 + 1, r);
else if (x1 < x2) mix(0, m1 - 1, m1, m2);
dfs();
}
}
ll a[1000010];
std::vector<ui> recover(int n) {
q.clear();
for (int i = 1; i <= n; i++) q.push_back(i);
dfs();
a[p] = mn;
for (int i = p - 1; i >= 1; i--) a[i] = query(i, p);
for (int i = 1; i < p - 1; i++) a[i] -= a[i + 1];
for (int i = p + 1; i <= n; i++) a[i] = query(p, i);
for (int i = n; i > p + 1; i--) a[i] -= a[i - 1];
vector<ui> ans; ans.clear();
for (int i = 1; i <= n; i++) ans.push_back(a[i]); return ans;
}