Problem: Joseph really likes the culture of Japan. Last year he learned Japanese traditional clothes and visual arts and now he is trying to find out the secret of the Japanese game called Nonogram.

In the one-dimensional version of the game, there is a row of n empty cells, some of which are to be filled with a pen. There is a description of a solution called a profile — a sequence of positive integers denoting the lengths of consecutive sets of filled cells. For example, the profile of [4, 3, 1] means that there are sets of four, three, and one filled cell, in that order, with at least one empty cell between successive sets.

<image>

A suitable solution for n = 12 and p = [4, 3, 1]. 

<image>

A wrong solution: the first four filled cells should be consecutive. 

<image>

A wrong solution: there should be at least one empty cell before the last filled cell. 

Joseph found out that for some numbers n and profiles p there are lots of ways to fill the cells to satisfy the profile. Now he is in the process of solving a nonogram consisting of n cells and a profile p. He has already created a mask of p — he has filled all the cells that must be filled in every solution of the nonogram.

<image>

The mask for n = 12 and p = [4, 3, 1]: all the filled cells above are filled in every solution. 

After a break, he lost the source profile p. He only has n and the mask m. Help Joseph find any profile p' with the mask m or say that there is no such profile and Joseph has made a mistake.

Input

The only line contains a string m — the mask of the source profile p. The length of m is n (1 ≤ n ≤ 100 000). The string m consists of symbols # and _ — denoting filled and empty cells respectively.

Output

If there is no profile with the mask m, output the number -1. Otherwise, on the first line, output an integer k — the number of integers in the profile p'. On the second line, output k integers of the profile p'.

Examples

Input


__#_____


Output


2
3 2 


Input


_#


Output


-1


Input


___


Output


0

Solution (in CPP):

Solution:
//Original Code:
//#include <self/utility>
//#include <self/debug>
//using namespace std;
//int n;
//char c[100005];
//int b[100005];
//int a[100005];
//
//int push(int len,int k,vector<int> &v)
//{
//	if(k==0) return (len==1);
//	if(k==1)
//	{
//		if(len%2==0) return false;
//		for(int i=1;i<len;i+=2) v.push_back(1);
//		return true;
//	}
//	if(k>=2)
//	{
//		if(len==2) return false;
//		if(len%2==0)
//		{
//			len-=3;
//			v.push_back(2);
//		}
//		for(int i=1;i<len;i+=2) v.push_back(1);
//		return true;
//	}
//	assert(false);return false;
//}
//
//void test(int k)
//{
//	if(k>n) return;
//	for(int i=0;i<k;i++)
//	{
//		if(c[n-1-i]=='#') return;
//	}
//	memset(b,0,sizeof(b));
//	memset(a,0,sizeof(a));
//	int st=-1;
//	for(int i=0;i<n;i++)
//	{
//		if(c[i]=='#' && st==-1)
//		{
//			st=i;
//		}
//		if(c[i]=='_' && st!=-1)
//		{
//			if(st-k-1>=0) a[st-k-1]++;
//			if(st-k<0) return;
//			for(int j=st-k;j<i;j++)
//			{
//				b[j]++;
//			}
//			st=-1;
//		}
//	}
//	if(st!=-1)
//	{
//		if(st-k-1>=0) a[st-k-1]++;
//		if(st-k<0) return;
//		for(int j=st-k;j<n;j++)
//		{
//			b[j]++;
//		}
//		st=-1;
//	}
//	for(int i=0;i<n;i++)
//	{
//		if(b[i]+a[i]>1) return;
//	}
//	// for(int i=0;i<n;i++)
//	// {
//	// 	cout<<b[i]<<' ';
//	// }
//	// cout<<endl;
//	vector<pii> v;
//	for(int i=0;i<n;)
//	{
//		int j=i;
//		int now=b[i];
//		while(i<n && b[i]==now) i++;
//		v.push_back(mp(i-j,now));
//	}
//	assert(v.back().first>=k);
//	if(v.back().second==0) v.back().first-=k-1;
//	if(v.front().second==0) v.front().first++;
//	vector<int> res;
//	for(int i=0;i<(int)v.size();i++)
//	{
//		int len=v[i].first,c=v[i].second;
//		if(c==1)
//		{
//			res.push_back(len);
//			continue;
//		}
//		else
//		{
//			if(!push(len,k,res)) return;
//		}
//	}
//	// debug(k);
//	cout<<res.size()<<endl;
//	for(auto x:res)
//	{
//		cout<<x<<' ';
//	}
//	cout<<endl;
//	exit(0);
//}
//
//int main()
//{
//	// freopen("input.txt","r",stdin);
//	scanf("%s",c);
//	n=strlen(c);
//	if(none_of(c,c+n,[](const char &c){return c=='#';})) over(0);
//	test(0);
//	test(1);
//	test(2);
//	test(3);
//	puts("-1");
//	return 0;
//}

//substituted with C++ Inliner
#ifndef _SELF_UTILITY
#define _SELF_UTILITY 1
#include <numeric>
#include <iostream>
#include <algorithm>
#include <cmath>
#include <stdio.h>
#include <stdlib.h>
#include <vector>
#include <map>
#include <queue>
#include <set>
#include <string>
#include <string.h>
#include <stack>
#include <assert.h>
#include <bitset>
#include <time.h>
#define Endl endl
#define mp make_pair
#define mt make_tuple
#define ll long long 
#define ull unsigned long long
#define pii pair<int,int>
#define over(A) {cout<<A<<endl;exit(0);}
#define all(A) A.begin(),A.end()
#define quickcin ios_base::sync_with_stdio(false);
#ifdef __TAKE_MOD
int mod;
#else
#ifdef __TAKE_CONST_MOD
const int mod=__TAKE_CONST_MOD;
#else
const int mod=1000000007;
#endif
#endif
const int gmod=3;
const int inf=1039074182;
const double eps=1e-9;
const ll llinf=2LL*inf*inf;
template <typename T1,typename T2> inline void chmin(T1 &x,T2 b) {if(b<x) x=b;}
template <typename T1,typename T2> inline void chmax(T1 &x,T2 b) {if(b>x) x=b;}
inline void chadd(int &x,int b) {x+=b-mod;x+=(x>>31 & mod);}
template <typename T1,typename T2> inline void chadd(T1 &x,T2 b) {x+=b;if(x>=mod) x-=mod;}
template <typename T1,typename T2> inline void chmul(T1 &x,T2 b) {x=1LL*x*b%mod;}
template <typename T1,typename T2> inline void chmod(T1 &x,T2 b) {x%=b,x+=b;if(x>=b) x-=b;}
template <typename T> inline T mabs(T x) {return (x<0?-x:x);}
using namespace std;
#endif
#ifndef _SELF_DEBUG
#define _SELF_DEBUG 1
#ifndef _SELF_OPERATOR
#define _SELF_OPERATOR 1
using namespace std;
template <typename T>
ostream &operator<<(ostream &cout, vector<T> vec)
{
	cout << "{";
	for (int i = 0; i < (int)vec.size(); i++)
	{
		cout << vec[i];
		if (i != (int)vec.size() - 1)
			cout << ',';
	}
	cout << "}";
	return cout;
}

template <typename T1, typename T2>
ostream &operator<<(ostream &cout, pair<T1, T2> p)
{
	cout << "(" << p.first << ',' << p.second << ")";
	return cout;
}

template <typename T, typename T2>
ostream &operator<<(ostream &cout, set<T, T2> s)
{
	vector<T> t;
	for (auto x : s)
		t.push_back(x);
	cout << t;
	return cout;
}

template <typename T, typename T2>
ostream &operator<<(ostream &cout, multiset<T, T2> s)
{
	vector<T> t;
	for (auto x : s)
		t.push_back(x);
	cout << t;
	return cout;
}

template <typename T>
ostream &operator<<(ostream &cout, queue<T> q)
{
	vector<T> t;
	while (q.size())
	{
		t.push_back(q.front());
		q.pop();
	}
	cout << t;
	return cout;
}

template <typename T1, typename T2, typename T3>
ostream &operator<<(ostream &cout, map<T1, T2, T3> m)
{
	for (auto &x : m)
	{
		cout << "Key: " << x.first << ' ' << "Value: " << x.second << endl;
	}
	return cout;
}

template <typename T1, typename T2>
void operator+=(pair<T1, T2> &x,const pair<T1, T2> y)
{
	x.first += y.first;
	x.second += y.second;
}
template <typename T1,typename T2>
pair<T1,T2> operator + (const pair<T1,T2> &x,const pair<T1,T2> &y)
{
	return make_pair(x.first+y.first,x.second+y.second);
}

template <typename T1,typename T2>
pair<T1,T2> operator - (const pair<T1,T2> &x,const pair<T1,T2> &y)
{
	return mp(x.first-y.first,x.second-y.second);
}

template <typename T1, typename T2>
pair<T1, T2> operator-(pair<T1, T2> x)
{
	return make_pair(-x.first, -x.second);
}

template <typename T>
vector<vector<T>> operator~(vector<vector<T>> vec)
{
	vector<vector<T>> v;
	int n = vec.size(), m = vec[0].size();
	v.resize(m);
	for (int i = 0; i < m; i++)
	{
		v[i].resize(n);
	}
	for (int i = 0; i < m; i++)
	{
		for (int j = 0; j < n; j++)
		{
			v[i][j] = vec[j][i];
		}
	}
	return v;
}
#endif
#include <sstream>
void print0x(int x)
{
	std::vector <int> vec;
	while(x)
	{
		vec.push_back(x&1);
		x>>=1;
	}
	std::reverse(vec.begin(),vec.end());
	for(int i=0;i<(int)vec.size();i++)
	{
		std::cout<<vec[i];
	}
	std::cout<<' ';
}

template <typename T>
void print0x(T x,int len)
{
	std::vector <int> vec;
	while(x)
	{
		vec.push_back(x&1);
		x>>=1;
	}
	reverse(vec.begin(),vec.end());
	for(int i=(int)vec.size();i<len;i++)
	{
		putchar('0');
	}
	for(size_t i=0;i<vec.size();i++)
	{
		std::cout<<vec[i];
	}
	std::cout<<' ';
}
vector<string> vec_splitter(string s) {
	s += ',';
	vector<string> res;
	while(!s.empty()) {
		res.push_back(s.substr(0, s.find(',')));
		s = s.substr(s.find(',') + 1);
	}
	return res;
}
void debug_out(
vector<string> __attribute__ ((unused)) args,
__attribute__ ((unused)) int idx, 
__attribute__ ((unused)) int LINE_NUM) { cerr << endl; } 
template <typename Head, typename... Tail>
void debug_out(vector<string> args, int idx, int LINE_NUM, Head H, Tail... T) {
	if(idx > 0) cerr << ", "; else cerr << "Line(" << LINE_NUM << ") ";
	stringstream ss; ss << H;
	cerr << args[idx] << " = " << ss.str();
	debug_out(args, idx + 1, LINE_NUM, T...);
}
#define debug(...) debug_out(vec_splitter(#__VA_ARGS__), 0, __LINE__, __VA_ARGS__)
#endif
using namespace std;
int n;
char c[100005];
int b[100005];
int a[100005];

int push(int len,int k,vector<int> &v)
{
	if(k==0) return (len==1);
	if(k==1)
	{
		if(len%2==0) return false;
		for(int i=1;i<len;i+=2) v.push_back(1);
		return true;
	}
	if(k>=2)
	{
		if(len==2) return false;
		if(len%2==0)
		{
			len-=3;
			v.push_back(2);
		}
		for(int i=1;i<len;i+=2) v.push_back(1);
		return true;
	}
	assert(false);return false;
}

void test(int k)
{
	if(k>n) return;
	for(int i=0;i<k;i++)
	{
		if(c[n-1-i]=='#') return;
	}
	memset(b,0,sizeof(b));
	memset(a,0,sizeof(a));
	int st=-1;
	for(int i=0;i<n;i++)
	{
		if(c[i]=='#' && st==-1)
		{
			st=i;
		}
		if(c[i]=='_' && st!=-1)
		{
			if(st-k-1>=0) a[st-k-1]++;
			if(st-k<0) return;
			for(int j=st-k;j<i;j++)
			{
				b[j]++;
			}
			st=-1;
		}
	}
	if(st!=-1)
	{
		if(st-k-1>=0) a[st-k-1]++;
		if(st-k<0) return;
		for(int j=st-k;j<n;j++)
		{
			b[j]++;
		}
		st=-1;
	}
	for(int i=0;i<n;i++)
	{
		if(b[i]+a[i]>1) return;
	}
	// for(int i=0;i<n;i++)
	// {
	// 	cout<<b[i]<<' ';
	// }
	// cout<<endl;
	vector<pii> v;
	for(int i=0;i<n;)
	{
		int j=i;
		int now=b[i];
		while(i<n && b[i]==now) i++;
		v.push_back(mp(i-j,now));
	}
	assert(v.back().first>=k);
	if(v.back().second==0) v.back().first-=k-1;
	if(v.front().second==0) v.front().first++;
	vector<int> res;
	for(int i=0;i<(int)v.size();i++)
	{
		int len=v[i].first,c=v[i].second;
		if(c==1)
		{
			res.push_back(len);
			continue;
		}
		else
		{
			if(!push(len,k,res)) return;
		}
	}
	// debug(k);
	cout<<res.size()<<endl;
	for(auto x:res)
	{
		cout<<x<<' ';
	}
	cout<<endl;
	exit(0);
}

int main()
{
//	// freopen("input.txt","r",stdin);
	scanf("%s",c);
	n=strlen(c);
	if(none_of(c,c+n,[](const char &c){return c=='#';})) over(0);
	test(0);
	test(1);
	test(2);
	test(3);
	puts("-1");
	return 0;
}