#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define N 5000

typedef struct list
{
  int x, y;
  char ground;
  struct list *prev;
  struct list *next;
} list;

list head;
list tail;

void Insert(char);
list *FarSide(list *);
int PubbleArea(list *, list *);

int main()
{
  int i;
  char c;
  list *p;
  list *farSide;
  int pubbleCount = 0;
  int pubble[N];
  int sumPubble = 0;

  head.next = &tail;
  tail.prev = &head;


  while(1)
    {
      c = getchar();
      if(c == '\n') break;

      Insert(c);
    }

  for(p = head.next; p != &tail; p = p->next)
    {
      if(p->ground == '\\' &&
     (farSide = FarSide(p)) != NULL)
        {
      pubble[pubbleCount] = PubbleArea(p, farSide);
      sumPubble += pubble[pubbleCount];
      p = farSide;
      pubbleCount++;
        }

    }

  printf("%d\n%d", sumPubble, pubbleCount);
  for(i = 0; i < pubbleCount; i++)
    {
      printf(" %d", pubble[i]);
    }
  printf("\n");


  return 0;
}

void Insert(char c)
{
  static int xCount = 0;
  static int yCount = 0;
  list *p;

  p = (list*)malloc(sizeof(list));
  p->prev = tail.prev;
  tail.prev->next = p;
  p->next = &tail;
  tail.prev = p;

  xCount++;
  
  if(c == '/' ) yCount++;
 if(c == '\\') yCount--;
  
  p->x = xCount;
  p->y = yCount;
  p->ground = c;
}

  
list *FarSide(list *s)
{
  
  list *i_p;
  int height;
  height = s->y + 1;

  for(i_p = s->next; i_p != &tail; i_p = i_p->next){
      if(i_p->y == height) return i_p;
    }
  return NULL;
}

int PubbleArea(list *pS, list *pE)
{
  list *i_p;
  list *farSide;
  int area = 0;

  for(i_p = pS; i_p != pE; i_p = i_p->next)
    {
      if(i_p->ground == '\\')
        {
      farSide = FarSide(i_p);
      area += farSide->x - i_p->x;
        }
    }
  return area;
}