#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef __int128_t LL;
typedef long double ld;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
#define F first
#define S second
#define pb push_back
mt19937 rnd;

const int N = 1e5 + 10;
bool good[N], ban[N];

vector<int> get(const vector<int>& a) {
    vector<int> res;
    for (int i = 1; i < a.size(); i++) {
        res.pb(a[i] - a[i - 1] - 1);
    }
    return res;
}

bool solve0(int n) {
    for (int i = 1; i <= n; i++) {
        if (!good[i]) {
            return 0;
        }
    }
    return 1;
}

vector<int> solve1(int n) {
    if (good[1] || good[n]) {
        return {};
    }
    for (int i = 1; i <= n - 1; i++) {
        if (good[i] && good[i + 1]) {
            return {};
        }
    }
    vector<int> res;
    for (int i = 1, cnt = 0; i <= n; i++) {
        if (!good[i]) {
            cnt++;
            if (i == n || good[i + 1]) {
                res.pb(cnt);
                cnt = 0;
            }
        }
    }
    return res;
}

vector<int> solve2(int n) {
    if (!good[1] || !good[n]) {
        return {};
    }
    vector<int> a = {0};
    for (int i = 1, cnt = 0; i <= n; i++) {
        if (good[i]) {
            cnt++;
            if (i == n || !good[i + 1]) {
                if (i == cnt) {
                    if (!(cnt & 1)) {
                        return {};
                    }
                    else {
                        for (int j = 2; j <= i; j += 2) {
                            a.pb(j);
                        }
                    }
                }
                else if (i == n) {
                    if (!(cnt & 1)) {
                        return {};
                    }
                    else {
                        for (int j = i - cnt + 1; j <= i; j += 2) {
                            a.pb(j);
                        }
                    }
                }
                else {
                    if (cnt & 1) {
                        return {};
                    }
                    else {
                        for (int j = i - cnt + 1; j <= i; j += 2) {
                            a.pb(j);
                        }
                    }
                }
                cnt = 0;
            }
        }
    }
    return get(a);
}

vector<int> solve3(int n) {
    vector<int> kek;
    for (int i = 1; i <= n; i++) {
        if (!good[i]) {
            ban[i] = 1;
            kek.pb(i);
        }
    }
    for (int j = 1; j <= kek.back(); j++) {
        ban[j] = 1;
    }
    for (int j = 1; j <= n + 2 - kek.front() - 1; j++) {
        ban[j] = 1;
    }
    ban[n - kek.front() + 3] = 1;
    for (int i = 1; i <= n - 1; i++) {
        if (!good[i] && good[i + 1]) {
            ban[i + 2] = 1;
        }
    }
    for (int i = 0; i + 1 < kek.size(); i++) {
        ban[n + kek[i] - kek[i + 1] + 4] = 1;
    }
    for (int s = n - 1; s >= 2; s--) {
        if (!ban[s]) {
            vector<int> a = {0};
            for (int i = 1, cnt = 0; i <= n; i++) {
                if (good[i]) {
                    cnt++;
                    if (i == n) {
                        int l = i - cnt + 1;
                        int r = s;
                        if (l <= r) {
                            for (int j = l; j <= r; j += 2) {
                                a.pb(j);
                            }
                            a.back() = r;
                        }
                        cnt = 0;
                    }
                    else if (!good[i + 1]) {
                        int l = i - cnt + 1;
                        int r = i + 1 - (n + 2 - s);
                        if (i == cnt) {
                            l = 2;
                        }
                        if (l <= r) {
                            for (int j = l; j <= r; j += 2) {
                                a.pb(j);
                            }
                            a.back() = r;
                        }
                        cnt = 0;
                    }
                }
            }
            return get(a);
        }
    }
    return {};
}

vector<int> solve(int n) {
    if (n == 1) {
        if (good[1]) {
            return {};
        }
        else {
            return {1};
        }
    }
    if (solve0(n)) {
        return {};
    }
    vector<int> ans = solve1(n);
    if (!ans.empty()) return ans;
    ans = solve2(n);
    if (!ans.empty()) return ans;
    ans = solve3(n);
    if (!ans.empty()) return ans;
    return {-1};
}

int main() {
    ios_base::sync_with_stdio(0); cin.tie(0);
#ifdef LOCAL
    freopen("input.txt", "r", stdin);
#endif

    string s;
    cin >> s;
    int n = s.size();
    for (int i = 1; i <= n; i++) {
        good[i] = (s[i - 1] == '_');
    }
    vector<int> ans = solve(n);
    if (!ans.empty() && ans.front() == -1) {
        cout << "-1\n";
    }
    else {
        cout << ans.size() << "\n";
        for (int i : ans) {
            cout << i << " ";
        }
        cout << "\n";
    }

#ifdef LOCAL
    cerr << "\nTime elapsed: " << 1.0 * clock() / CLOCKS_PER_SEC << " s.\n";
#endif
    return 0;
}
