#include using namespace std; string C; int L, N, M; vector ans; vector used; int total_len(int n) { int s = 0; for (int i = 1; i <= n; i++) { s += 32 - __builtin_clz(i); } return s; } bool dfs(int pos) { if (pos == L) { return (int)ans.size() == N; } if (C[pos] != '1') return false; int v = 0; for (int len = 1; len <= M && pos + len <= L; len++) { v = v * 2 + (C[pos + len - 1] - '0'); if (pos + len < L && C[pos + len] != '1') continue; if (v < 1 || v > N) continue; if (used[v]) continue; used[v] = 1; ans.push_back(v); if (dfs(pos + len)) return true; ans.pop_back(); used[v] = 0; } return false; } int main() { cin >> C; L = C.size(); N = 1; while (total_len(N) < L) N++; M = 32 - __builtin_clz(N); used.assign(N + 1, 0); dfs(0); for (int i = 0; i < (int)ans.size(); i++) { if (i) cout << ' '; cout << ans[i]; } cout << '\n'; }