#include<stdio.h>
#include<string.h>
#define MAX 20001
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(void){
    int i,j,idx,Stack1[MAX];;
    char str[MAX];
    idx_S Stack2[MAX];
    int top1=0,top2=0,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;
            default:
                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;
}
