#include <stdio.h>
#define M 20000
#define N 10000

typedef struct /*水たまりの情報をいれる構造体*/
{
  int S;/*面積*/
  int h;/*縁の高さ*/
  int yoko;/*面積計算の終了位置x座標*/
}Mizutamari;

typedef struct
{
  int x;
  int y;
}Zahyo;

Mizutamari MT[N];
Zahyo Z[M];

int main()
{
  int Y=0,X=0 /*現在の点の座標*/
    ,y_max=0,x_max=0 /*xyのMAX*/
    ,S_sum=0 /*水たまりの面積の合計*/
    ,menseki
    ,n=0/*水たまりの数*/
    ,j=0/*座標スタックの数*/
    ,i,k=1;/*変数*/

  char c;/*入力したものをいれるやつ*/

  while(scanf("%c",&c)!=EOF)
    {
      menseki=0;
      if(c=='\\')
	{
	  /*座標スタックに現在のx,yをそれぞれ記憶。
	    ついでにx++,y--をして現在の点の座標を動かす*/
	  Z[j].x=X++;
	  Z[j].y=Y--;
	  j++;
	}
      else if(c=='/')
	{
	  
	  X++;
	  Y++;

	  if(y_max<Y)
	    {
	      y_max=Y;
	      x_max=X;
	    }
	  
	  if(j>0)
	    {
	      /*面積計算*/
	      menseki=X-1-Z[j-1].x;
	      /*もし現在の点のy座標より低い位置で
		面積を計算したMTがあるならそれを取り出して足す！！*/
	      while(n>0 && MT[n-1].h<Y &&MT[n-1].yoko>=x_max)
		{
		  menseki+=MT[n-1].S;
		  n--;
		}
	      /*MTに代入*/
	      MT[n].S=menseki;
	      MT[n].h=Y;
	      MT[n].yoko=X;
	      
	      n++;
	      j--;
	    }
	}
      else if(c=='_')
	{
	  X++;
	}
     
    }
  for(i=0;i<n;i++)
    {
      S_sum+=MT[i].S;
    }
  
  /*表示*/
  printf("%d\n",S_sum);
  if(n!=0)
    {
      printf("%d ",n);
      for(i=0;i<n-1;i++)printf("%d ",MT[i].S);
      printf("%d\n",MT[n-1].S);
    }
  else
    {
      printf("%d\n",n);
    }
  return 0;
}

