#include<stdio.h>
#include<string.h>
#define MAX 20001

typedef struct index{
 int idx;
 int S;
}index;


void push1(int S[],int x,int *top){
 S[*top] = x;
 (*top)++;
return;
}

void push2(index S[],int idx,int s,int *top){
 S[*top].idx = idx;
 S[*top].S = s;
 (*top)++;
return;
}

int pop(int S[],int *top){
 (*top)--;
 return S[*top];
}

void Union(index S[],int *top){
 int i;

 for(i = (*top) - 1 ; i > 0 ; i--){

   if(S[i].idx < S[i-1].idx){
     (*top)--;
     S[i-1].idx = S[i].idx;
     S[i-1].S += S[i].S;
   }

 }

return;
}

int main(){
  int i, j, idx, top1 = 0, top2 = 0, sum = 0;
  char str[MAX];
  int Stack1[MAX];
  index Stack2[MAX];

 scanf("%s", str);

 for(i = 0 ; i < strlen(str) ; i++){

  switch(str[i]){
   case '\\':push1(Stack1, i, &top1);
             break;
   case '/' :if(top1 == 0)break;
             idx=pop(Stack1, &top1);
             sum += (i-idx);
             push2(Stack2, idx, i - idx, &top2);
             Union(Stack2, &top2);
             break;
  }

 }

 printf("%d\n", sum);
 if(top2 == 0) printf("%d\n", top2);
 else {
   printf("%d ", top2);
   for(i = 0 ; i < top2 - 1 ; i++) printf("%d ", Stack2[i].S);
   printf("%d\n", Stack2[top2-1].S);
 }

return 0;
}
