#include <stdio.h>
#include <string.h>
#include <stdlib.h>
 
typedef struct FOUNTAIN_DATA{
	int area;
	int plane;
	struct FOUNTAIN_DATA *next;
} ST_FOUNTAIN;
 
void push(ST_FOUNTAIN **p, ST_FOUNTAIN *d)
{
	d->next = *p;
	*p = d;
}
 
ST_FOUNTAIN *pop(ST_FOUNTAIN **p)
{
	ST_FOUNTAIN *d = *p;
	if(*d != NULL)
	{
		*p = (*p)->next;
	}
	
	return *d;
}
 
int main()
{
	char ch;
	int area;
	int plane;
	int total;
	int count;
	int loop;
	ST_FOUNTAIN *w1;
	ST_FOUNTAIN *w2;
	ST_FOUNTAIN *d;
	
	w1 = NULL;
	w2 = NULL;
	while((ch = getchar()) != '\n')
	{
		if(ch == '\\')
		{
			d = (ST_FOUNTAIN*)malloc(sizeof(ST_FOUNTAIN));
			d->area = 0;
			d->plane = 0;
			push(&w1, d);
		}
		else if(ch == '_')
		{
			d = pop(&w1);
			if (d != NULL)
			{
				d->plane++;
				push(&w1, d);
			}
			else
			{
				/* error process */
			}
		}
		else if(ch == '/')
		{
			area = plane = 0;
			while((d = pop(&w1)) != NULL)
			{
				/* merge foutain data with more depth point */
				area += d->area;	
				plane += d->plane;
				if(d->area == 0)	/* if check point */
				{
					break;
				}
				else
				{
					push(&w2,d);
				}
			}
 
			if(d != NULL)	/* calcration or merge foutain data with more depth point */
			{
				d->area = area + plane + 1;
				d->plane = plane + 2;
				push(&w1, d);
				while((d = pop(&w2)) != NULL)
				{
					free(d);
				}
			}
			else if (area > 0)
			{
				while((d = pop(&w2)) != NULL) push(&w1, d);
			}
		}
		else
		{
		}
	}
 
	total = count = 0;
	while((d = pop(&w1)) != NULL)
	{
		if(d->area == 0)
		{
			free(d);
			continue;
		}
 
		total += d->area;
		count++;
		push(&w2, d);
	}
 
	printf("%d\n", total);
	printf("%d", count);
	if (count > 0)
	{
		printf(" ");
		for(loop = 0; loop < count; loop++)
		{
			d = pop(&w2);
			printf("%d", d->area);
			free(d);
			if(loop + 1 < count) printf(" ");
		}
	}
	printf("\n");
 
	return 0;
}

