Problem: IA has so many colorful magnets on her fridge! Exactly one letter is written on each magnet, 'a' or 'b'. She loves to play with them, placing all magnets in a row. However, the girl is quickly bored and usually thinks how to make her entertainment more interesting.

Today, when IA looked at the fridge, she noticed that the word formed by magnets is really messy. "It would look much better when I'll swap some of them!" — thought the girl — "but how to do it?". After a while, she got an idea. IA will look at all prefixes with lengths from 1 to the length of the word and for each prefix she will either reverse this prefix or leave it as it is. She will consider the prefixes in the fixed order: from the shortest to the largest. She wants to get the lexicographically smallest possible word after she considers all prefixes. Can you help her, telling which prefixes should be chosen for reversing?

A string a is lexicographically smaller than a string b if and only if one of the following holds:

  * a is a prefix of b, but a ≠ b;
  * in the first position where a and b differ, the string a has a letter that appears earlier in the alphabet than the corresponding letter in b.

Input

The first and the only line contains a string s (1 ≤ |s| ≤ 1000), describing the initial string formed by magnets. The string s consists only of characters 'a' and 'b'.

Output

Output exactly |s| integers. If IA should reverse the i-th prefix (that is, the substring from 1 to i), the i-th integer should be equal to 1, and it should be equal to 0 otherwise.

If there are multiple possible sequences leading to the optimal answer, print any of them.

Examples

Input

bbab


Output

0 1 1 0


Input

aaaaa


Output

1 0 0 0 1

Note

In the first example, IA can reverse the second and the third prefix and get a string "abbb". She cannot get better result, since it is also lexicographically smallest string obtainable by permuting characters of the initial string.

In the second example, she can reverse any subset of prefixes — all letters are 'a'.

Solution (in JAVA):

Solution:
import java.io.*;
import java.util.*;
import java.text.*;
import java.lang.*;
import java.lang.reflect.Array;
import java.math.BigInteger;
import java.util.regex.*;
public class Main {
         public static ArrayList a[]=new ArrayList[300001];
		/*static long s[];
        static long[] seg=new long[4000000];
        static pair[] seg1=new pair[4000000];
        static long[] maxi=new long[4000000];
        static void build(int node,int start,int end) {
        	if(start==end) {
        		seg[node]=s[start];
        		return ;
        	}
        	int mid=(start+end)/2;
        	build(2*node+1,start,mid);
        	build(2*node+2,mid+1,end);
        	seg[node]=GCD(seg[2*node+1],seg[2*node+2]);
        }
        static void build1(int node,int start,int end) {
        	if(start==end) {
        		seg1[node]=new pair(s[start],1);
        		return ;
        	}
        	int mid=(start+end)/2;
        	build1(2*node+1,start,mid);
        	build1(2*node+2,mid+1,end);
        	if(seg1[2*node+1].x==seg1[2*node+2].x) {
        		seg1[node]=new pair(seg1[2*node+2].x,seg1[2*node+1].y+seg1[2*node+2].y);
        	}
        	else if(seg1[2*node+1].x<seg1[2*node+2].x)
        	{
        		seg1[node]=new pair(seg1[2*node+1].x,seg1[2*node+1].y);
        	}
        	else
        	{
        		seg1[node]=new pair(seg1[2*node+2].x,seg1[2*node+2].y);
        	}
        }
       /* static void update(int node,int start,int end,long l,int value) {
        	if(start==end) {
        		seg[node]+=value;
        		return ;
        	}
        	int mid=(start+end)/2;
        	if(start<=l && mid>=l)
        		update(2*node+1,start,mid,l,value);
        	else
        		update(2*node+2,mid+1,end,l,value);
        	seg[node]=seg[2*node+1]+seg[2*node+2];
        }*/
       
        /*static long query(int node,int start,int end,int l,int r) {
        	if(start>r || end<l)
        		return 0;
        	if(start>=l && end<=r)
        		return seg[node];
        	int mid=(start+end)/2;
        	return GCD(query(2*node+1,start,mid,l,r),query(2*node+2,mid+1,end,l,r));
        }
        static pair query1(int node,int start,int end,int l,int r) {
        	if(start>r || end<l)
        		return new pair(Long.MAX_VALUE,0);
        	if(start>=l && end<=r)
        		return seg1[node];
        	int mid=(start+end)/2;
        	pair p=query1(2*node+1,start,mid,l,r);
        	pair p1=query1(2*node+2,mid+1,end,l,r);
        	if(p.x==p1.x) {
        		return(new  pair(p.x,p.y+p1.y));
        	}
        	else if(p.x<p1.x)
        	{
        		return(p);
        	}
        	else
        	{
        		return(p1);
        	}
        }*/
         static boolean f(int n) {
        	 int cnt=0;
        	 int a[]=new  int[100];
        	 while(n>0) {
        		 a[cnt]=n%10;
        		 n/=10;
        		 cnt++;
        	 }
        	 for(int i=0;i<cnt/2;i++) {
        		 if(a[i]!=a[cnt-i-1]) {
        			 return false;
        		 }
        	 }
        	 return true;
        	 
         }
         static Vector<Integer>v=new Vector<>();
         static void pre() {
        	 for(int i=0;i<=1000000;i++) {
        		 if(f(i))
        		 {
        			 v.add(i);
        		 }
        	 }
         }
         
		public static void main(String[] args) 
        {
            InputReader in = new InputReader(System.in);
            PrintWriter pw = new PrintWriter(System.out);
            char a[]=in.nextLine().toCharArray();
            int ans[]=new int[a.length];
            for(int i=0;i<a.length;i++) {
            	 if(a[i]=='a' && i>0) {
            		 ans[i-1]=1;
            		 if(a[i-1]=='b')
            		 {
            			
            			 ans[i-1]=1;
            			 while( i<a.length && a[i]=='a' ) {
            				 i++;
            			 }
            			
            			 ans[i-1]=1;
            			 i--;
            		 }
            		 	
            	 }
            		 
            	
            		
            }
            
            for(int i=0;i<a.length;i++) {
            	pw.print(ans[i]+" ");
            }
            pw.flush();
            pw.close();
        
        
        }
		private static void debug(Object... o) {
			System.out.println(Arrays.deepToString(o));
		}
        static class InputReader 
        {
        private final InputStream stream;
        private final byte[] buf = new byte[8192];
        private int curChar, snumChars;
        private SpaceCharFilter filter;
 
        public InputReader(InputStream stream) 
        {
            this.stream = stream;
        }
        public int snext() 
        {
            if (snumChars == -1)
                throw new InputMismatchException();
            if (curChar >= snumChars) 
            {
                curChar = 0;
                try 
                {
                    snumChars = stream.read(buf);
                } 
                
                catch (IOException e) 
                {
                    throw new InputMismatchException();
                }
                
                if (snumChars <= 0)
                    return -1;
            }
            return buf[curChar++];
        }
 
        public int nextInt() 
        {
            int c = snext();
            while (isSpaceChar(c)) 
            {
                c = snext();
            }
            int sgn = 1;
            if (c == '-')
            {
                sgn = -1;
                c = snext();
            }
            int res = 0;
            do 
            {
                if (c < '0' || c > '9')
                    throw new InputMismatchException();
                res *= 10;
                res += c - '0';
                c = snext();
            } while (!isSpaceChar(c));
            return res * sgn;
        }
 
        public long nextLong()
        {
            int c = snext();
            while (isSpaceChar(c)) 
            {
                c = snext();
            }
            int sgn = 1;
            if (c == '-') 
            {
                sgn = -1;
                c = snext();
            }
            long res = 0;
            do 
            {
                if (c < '0' || c > '9')
                    throw new InputMismatchException();
                res *= 10;
                res += c - '0';
                c = snext();
            } while (!isSpaceChar(c));
            return res * sgn;
        }
 
        public int[] nextIntArray(int n) 
        {
            int a[] = new int[n];
            for (int i = 0; i < n; i++) 
            {
                a[i] = nextInt();
            }
            return a;
        }
        static class tri implements Comparable<tri> {
            int p, c, l;
 
            tri(int p, int c, int l) {
                this.p = p;
                this.c = c;
                this.l = l;
            }
 
            public int compareTo(tri o) {
                return Integer.compare(l, o.l);
            }
        }
 
        public String readString()
        {
            int c = snext();
            while (isSpaceChar(c)) 
            {
                c = snext();
            }
            StringBuilder res = new StringBuilder();
            do 
            {
                res.appendCodePoint(c);
                c = snext();
            } while (!isSpaceChar(c));
            return res.toString();
        }
 
        public String nextLine() 
        {
            int c = snext();
            while (isSpaceChar(c))
                c = snext();
            StringBuilder res = new StringBuilder();
            do 
            {
                res.appendCodePoint(c);
                c = snext();
            } while (!isEndOfLine(c));
            return res.toString();
        }
 
        public boolean isSpaceChar(int c) 
        {
            if (filter != null)
                return filter.isSpaceChar(c);
            return c == ' ' || c == '\n' || c == '\r' || c == '\t' || c == -1;
        }
 
        private boolean isEndOfLine(int c) 
        {
            return c == '\n' || c == '\r' || c == -1;
        }
 
        public interface SpaceCharFilter
        {
            public boolean isSpaceChar(int ch);
        }
    }
        public static long mod = 1000000007;
        public static int d;
        public static int p;
        public static int q;
        
        public static int[] suffle(int[] a,Random gen)
        {
            int n = a.length;
            for(int i=0;i<n;i++)
            {
                int ind = gen.nextInt(n-i)+i;
                int temp = a[ind];
                a[ind] = a[i];
                a[i] = temp;
            }
            return a;
        }
        
        public static void swap(int a, int b){
            int temp = a;
            a = b;
            b = temp;
        }
        
        public static HashSet<Integer> primeFactorization(int n)
        {
            HashSet<Integer> a =new HashSet<Integer>();
            for(int i=2;i*i<=n;i++)
            {
                while(n%i==0)
                {
                    a.add(i);
                    n/=i;
                }
            }
            if(n!=1)
                a.add(n);
            return a;
        }
        
        public static void sieve(boolean[] isPrime,int n)
        {
            for(int i=1;i<n;i++)
                isPrime[i] = true;
            
            isPrime[0] = false;
            isPrime[1] = false;
            
            for(int i=2;i*i<n;i++)
            {
                if(isPrime[i] == true)
                {
                    for(int j=(2*i);j<n;j+=i)
                        isPrime[j] = false;
                }
            }
        }
        
        public static int GCD(int a,int b)
        {
            if(b==0)
                return a;
            else
                return GCD(b,a%b);
        }
        
        
        public static long GCD(long a,long b)
        {
            if(b==0)
                return a;
            else
                return GCD(b,a%b);
        }
        
        public static void extendedEuclid(int A,int B)
        {
            if(B==0)
            {
                d = A;
                p = 1 ;
                q = 0;
            }
            else
            {
                extendedEuclid(B, A%B);
                int temp = p;
                p = q;
                q = temp - (A/B)*q;
            }
        }
        
        public static long LCM(long a,long b)
        {
            return (a*b)/GCD(a,b);
        }
        
        public static int LCM(int a,int b)
        {
            return (a*b)/GCD(a,b);
        }
        
        public static int binaryExponentiation(int x,int n)
        {
            int result=1;
            while(n>0)
            {
                if(n % 2 ==1)
                    result=result * x;
                x=x*x;
                n=n/2;
            }
            return result;
        }
        
        public static long binaryExponentiation(long x,long n)
        {
            long result=1;
            while(n>0)
            {
                if(n % 2 ==1)
                    result=result * x;
                x=x*x;
                n=n/2;
            }
            return result;
        }
        
        public static int modularExponentiation(int x,int n,int M)
        {
            int result=1;
            while(n>0)
            {
                if(n % 2 ==1)
                    result=(result * x)%M;
                x=(x%M*x)%M;
                n=n/2;
            }
            return result;
        }
        
        public static long modularExponentiation(long x,long n,long M)
        {
            long result=1;
            while(n>0)
            {
                if(n % 2 ==1)
                    result=(result%M * x%M)%M;
                x=(x%M * x%M)%M;
                n=n/2;
            }
            return result;
        }
        
        public static long modInverse(int A,int M)
        {
            return modularExponentiation(A,M-2,M);
        }
        
        public static long modInverse(long A,long M)
        {
            return modularExponentiation(A,M-2,M);
        }
        
        public static boolean isPrime(int n)
        {
            
            if (n <= 1)  return false;
            if (n <= 3)  return true;
            
            if (n%2 == 0 || n%3 == 0) 
                return false;
         
            for (int i=5; i*i<=n; i=i+6)
            {
                if (n%i == 0 || n%(i+2) == 0)
                   return false;
            }
            
            return true;
        }
        
         public static long[] shuffle(long[] a, Random gen){ 
                for(int i = 0, n = a.length;i < n;i++){ 
                    int ind = gen.nextInt(n-i)+i; 
                    long d = a[i]; 
                    a[i] = a[ind]; 
                    a[ind] = d; 
                } 
                return a; 
            }
        static class pair implements Comparable<pair>
        {
            Long x;
            Long y;
            pair(long a,long sum)
            {
                this.x=a;
                this.y=sum;
            }
 

 
 
 
 
 
        public int compareTo(pair o) {
                int result = x.compareTo(o.x);
                if(result==0)
                    result = y.compareTo(o.y);
                
            return result;
            }  
            
            public String toString()
            {
                return x+" "+y;
            }
            
            public boolean equals(Object o)
            {
                if (o instanceof pair)
                {
                    pair p = (pair)o;
                    return p.x == x && p.y == y ;
                }
                return false;
            }
            
            public int hashCode()
            {
                return new Long(x).hashCode()*31 + new Long(y).hashCode();
            }
        }
       
 
      
}