Given is a string S consisting of `L` and `R`.

Let N be the length of S. There are N squares arranged from left to right, and the i-th character of S from the left is written on the i-th square from the left.

The character written on the leftmost square is always `R`, and the character written on the rightmost square is always `L`.

Initially, one child is standing on each square.

Each child will perform the move below 10^{100} times:

* Move one square in the direction specified by the character written in the square on which the child is standing. `L` denotes left, and `R` denotes right.



Find the number of children standing on each square after the children performed the moves.

Constraints

* S is a string of length between 2 and 10^5 (inclusive).
* Each character of S is `L` or `R`.
* The first and last characters of S are `R` and `L`, respectively.

Input

Input is given from Standard Input in the following format:


S


Output

Print the number of children standing on each square after the children performed the moves, in order from left to right.

Examples

Input

RRLRL


Output

0 1 2 1 1


Input

RRLLLLRLRRLL


Output

0 3 3 0 0 0 1 1 0 2 2 0


Input

RRRLLRLLRRRLLLLL


Output

0 0 3 2 0 2 1 0 0 0 4 4 0 0 0 0
import java.io.*;
import java.util.*;
public class Main
{
	String s;
	int n;
	boolean visited[];
	int finalpos[],walk[];
	private void solve()throws IOException
	{
		s=nextLine();
		n=s.length();
		visited=new boolean[n+1];
		finalpos=new int[n+1];
		walk=new int[n+1];
		for(int i=1;i<=n;i++)
			if(visited[i]==false)
				dfs(i);
		int count[]=new int[n+1];
		for(int i=1;i<=n;i++)
			count[finalpos[i]]++;
		for(int i=1;i<=n;i++)
			out.print(count[i]+" ");
		out.println();
	}
	void dfs(int v)
	{
		visited[v]=true;
		if(s.charAt(v-1)=='L')
		{
			if(s.charAt(v-2)=='R')
			{
				walk[v]=0;
				finalpos[v]=v;
				if(visited[v-1]==false)
					dfs(v-1);
			}
			else
			{
				if(visited[v-1]==false)
					dfs(v-1);
				walk[v]=1+walk[v-1];
				if(walk[v]%2==0)
					finalpos[v]=finalpos[v-walk[v]];
				else
					finalpos[v]=finalpos[v-walk[v]]-1;
			}
		}
		else
		{
			if(s.charAt(v)=='L')
			{
				walk[v]=0;
				finalpos[v]=v;
				if(visited[v+1]==false)
					dfs(v+1);
			}
			else
			{
				if(visited[v+1]==false)
					dfs(v+1);
				walk[v]=1+walk[v+1];
				if(walk[v]%2==0)
					finalpos[v]=finalpos[v+walk[v]];
				else
					finalpos[v]=finalpos[v+walk[v]]+1;
			}
		}
	}

	 
	///////////////////////////////////////////////////////////

	public void run()throws IOException
	{
		br=new BufferedReader(new InputStreamReader(System.in));
		st=null;
		out=new PrintWriter(System.out);

		solve();
		
		br.close();
		out.close();
	}
	public static void main(String args[])throws IOException{
		new Main().run();
	}
	BufferedReader br;
	StringTokenizer st;
	PrintWriter out;
	String nextToken()throws IOException{
		while(st==null || !st.hasMoreTokens())
		st=new StringTokenizer(br.readLine());
		return st.nextToken();
	}
	String nextLine()throws IOException{
		return br.readLine();
	}
	int nextInt()throws IOException{
		return Integer.parseInt(nextToken());
	}
	long nextLong()throws IOException{
		return Long.parseLong(nextToken());
	}
	double nextDouble()throws IOException{
		return Double.parseDouble(nextToken());
	}
}