#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 5000
 
typedef struct list
{
  int x,y,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,pubbleCount=0,pubble[N],sumPubble=0;
  char c;
  list *p,*farSide;     
  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;
}