using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;


namespace ALDS1_3_D
{
    class Program
    {
        static void Main(string[] args)
        {
            string input = Console.ReadLine();
            char[] map = input.ToCharArray();
            int[] height = SetHeight(map);
            int highest = HighestPos(height);

            bool pool = false;
            int height_s = 0;
            int total = 0;
            List<int> forward = new List<int>();
            List<int> back = new List<int>();

            //0=>highest
            for (int i = 0; i < highest ; i++)
            {
                if (!pool && map[i] == '\\')
                {
                    pool = true;
                    height_s = height[i];
                    total = 0;

                    while (pool)
                    {
                        switch (map[i])
                        {
                            case '\\':
                                total += (height_s - height[i]) * 2 + 1;
                                i++;
                                break;

                            case '_':
                                total += (height_s - height[i]) * 2 ;
                                i++;
                                break;

                            case '/':
                                if (height[i] == height_s - 1)
                                {
                                    pool = false;
                                    total += (height_s - height[i]) * 2 - 1; ;
                                    forward.Add(total / 2);
                                } else
                                {
                                    total += (height_s - height[i]) * 2 - 1;
                                    i++;
                                }
                                break;
                        }
                    }
                }
            }
            // back
            
            for (int i = height.Length - 1; i > highest; i--)
            {
                if (!pool && map[i - 1] == '/')
                {
                    pool = true;
                    height_s = height[i];
                    total = 0;

                    while (pool)
                    {
                        switch (map[i-1])
                        {
                            case '/':
                                total += (height_s - height[i]) * 2 + 1;
                                i--;
                                break;

                            case '_':
                                total += (height_s - height[i]) * 2;
                                i--;
                                break;

                            case '\\':
                                if (height[i] == height_s - 1)
                                {
                                    pool = false;
                                    total += (height_s - height[i]) * 2 - 1; ;
                                    back.Add(total / 2);
                                }
                                else
                                {
                                    total += (height_s - height[i]) * 2 - 1;
                                    i--;
                                }
                                break;
                        }
                    }
                }
            }
            
            for (int i = back.Count - 1; i >= 0; i--)
            {
                forward.Add(back[i]);
            }
            int all = 0;
            for (int i = 0; i < forward.Count; i++)
            {
                all += forward[i];
            }
            Console.WriteLine(all);
            Console.WriteLine(ListJoin(forward));

            while (true)
            {
                input = Console.ReadLine();
                if (string.IsNullOrEmpty(input)) break;
            }

        }

        public static int[] SetHeight(char[] map)
        {
            int count = 0;
            int min = 0;
            //calc BaseLine
            for (int i = 0; i < map.Length; i++)
            {
                switch (map[i])
                {
                    case '\\':
                        count--;
                        if (count <= min) min = count;
                        break;
                    
                    case '/':
                        count++;
                        break;
                }
            }
            //set Height
            int[] height = new int[map.Length + 1];
            height[0] = 0 - min;
            for (int i = 0; i < map.Length; i++)
            {
                switch (map[i])
                {
                    case '\\':
                        height[i + 1] = height[i] - 1;
                        break;

                    case '/':
                        height[i + 1] = height[i] + 1;
                        break;

                    case '_':
                        height[i + 1] = height[i];
                        break;
                }
            }
            return height;
        }

        public static int HighestPos(int[] height)
        {
            int highest = height.Max();

            for (int i = 0; i < height.Length; i++)
            {
                if (height[i] == highest)
                {
                    return i;
                }
            }
            return 0;
        }

        public static string ListJoin (List<int> list)
        {
            StringBuilder sb = new StringBuilder();
            sb.Append(list.Count);
            if (list.Count != 0) sb.Append(" ");
            for (int i = 0; i < list.Count; i++)
            {
                if (i != 0) sb.Append(" ");
                sb.Append(list[i]);
            }

            return sb.ToString();
        }
    }
}

Measured memory_bytes: 9732