#include #define int long long using namespace std; #define rep(i, n) for(int i=0;i<(n);++i) typedef pair pii; const int INF = 1l << 60; #define u_b upper_bound #define l_b lower_bound int dp[300300]; int minv[300300]; int maxv[300300]; bool les(int a, int b) { if (a % 2 != b % 2) { return a % 2; } if (a % 2 == 1) { return a < b; } return a > b; } signed main() { int N; cin >> N; fill(dp, dp + 300300, INF); dp[0] = 0; minv[0] = 0, maxv[0] = 0; for (int i = 1; i <= N; ++i) { for (int j = 1; i - j * j >= 0; ++j) { if (dp[i] > dp[i - j * j] + j) { dp[i] = dp[i - j * j] + j; minv[i] = j; maxv[i] = j; } else if (dp[i] == dp[i - j * j] + j) { minv[i] = les(minv[i], j) ? minv[i] : j; maxv[i] = les(maxv[i], j) ? j : maxv[j]; } } } string ans; int s = 0; while (N) { int j = s == 0 ? minv[N] : maxv[N]; rep(i, j) { ans.push_back(s + '0'); s = 1 - s; } s = 1 - s; N -= j * j; } cout << ans << endl; return 0; }