#include #include #include #include using namespace std; bool is_square(long long x) { if (x < 0) return false; long long r = round(sqrt(x)); return r * r == x; } int N; vector R; vector W; vector D; vector used(205, false); bool found_ans = false; void dfs(int k) { if (found_ans) return; if (k > N) { found_ans = true; return; } for (int w = 2; w <= 200; ++w) { if (used[w]) continue; bool ok = true; for (int u = 2; u < k; ++u) { long long w_u = (u == 2) ? R[1] : W[u]; bool sq = false; if (is_square(D[k] - D[u])) sq = true; else if (is_square(w_u + D[k])) sq = true; else if (is_square(D[u] + w)) sq = true; else if (is_square(w_u + w)) sq = true; if (!sq) { ok = false; break; } } if (ok) { W[k] = w; used[w] = true; dfs(k + 1); if (found_ans) return; used[w] = false; } } } int main() { cin >> N; R.assign(N + 1, 0); W.assign(N + 1, 0); D.assign(N + 1, 0); for (int i = 1; i <= N; ++i) { D[i] = (i - 1) * (i - 1); if (i > 1) { R[i - 1] = D[i] - D[i - 1]; used[R[i - 1]] = true; } } dfs(3); }