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

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


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

void push2(idx_S 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(idx_S 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;
 char str[MAX];
 int idx;
 int Stack1[MAX];
 idx_S Stack2[MAX];
 int top1=0;
 int top2=0;
 int sum=0;

 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;
}


