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

namespace Elementary_data_structures
{
    class Areas_on_the_Cross_Section_Diagram
    {
        static void Main(string[] args)
        {
            var token = Console.ReadLine();

            short bottom = 0;
            short top = 0;
            short height = 0;
            for (int i = 0; i < token.Length; i++)
            {
                switch (token[i])
                {
                    case '\\':
                        height--;
                        break;
                    case '/':
                        height++;
                        break;
                }
                if (height > top) top = height;
                if (height < bottom) bottom = height;
            }
            height = (short)(top - bottom);

            // \ = 1
            // / = 2
            // _ = 3
            var csd = new byte[token.Length];
            var depth = new short[token.Length];

            short d = (short)(top - 1);
            var inc = 0;
            for (int i = 0; i < token.Length; i++)
            {
                switch (token[i])
                {
                    case '\\':
                        if (inc == -1 || inc == 0) d++;
                        inc = -1;
                        csd[i] = 1;
                        break;
                    case '/':
                        if (inc == 1) d--;
                        csd[i] = 2;
                        inc = 1;
                        break;
                    case '_':
                        if (inc == 1) d--;
                        inc = 0;
                        csd[i] = 3;
                        break;
                }
                depth[i] = d;
            }

            // \ + water = 4
            // water + / = 5
            for (int i = 0; i < height; i++)
            {
                var left = -1;
                d = -1;
                for (int j = 0; j < token.Length; j++)
                {
                    if (csd[j] == 1)
                    {
                        left = j;
                        d = depth[j];
                    }
                    else if (csd[j] == 2 && left != -1 && d == depth[j])
                    {
                        csd[left] = 4;
                        csd[j] = 5;
                    }
                }
            }

            var areas = new List<int>();
            var area = 0;

            var pool = false;
            d = 0;
            for (int j = 0; j < token.Length; j++)
            {
                if (pool && csd[j] == 5 && d == depth[j])
                {
                    pool = false;
                    area++;
                    d = 0;
                    area /= 2;
                    areas.Add(area);
                    area = 0;
                    continue;
                }

                if (!pool && csd[j] == 4)
                {
                    pool = true;
                    d = depth[j];
                }
                if (pool)
                    switch (csd[j])
                    {
                        case 3:
                            area += (depth[j] - d + 1) * 2;
                            break;
                        case 4:
                        case 5:
                            area += (depth[j] - d) * 2 + 1;
                            break;
                    }
            }

            Console.WriteLine(areas.Sum());

            var c = areas.Count;
            if (c == 0) Console.WriteLine(0);
            else
            {
                Console.Write(c + " ");
                for (int i = 0; i < c - 1; i++)
                {
                    Console.Write(areas[i] + " ");
                }
                Console.WriteLine(areas[c - 1]);
            }
        }
    }
}

Measured memory_bytes: 9756