#include<stdio.h>

#define MAX 1000


int EACH_AREA_Calculation(int e_area[], int e_e_idx)//各水溜まりの面積を求める
{
	int e_number = 0,
		each_area = 0;

	while (e_area[e_number] != 0) {
		each_area += e_area[e_number];
		e_number++;
	}

	return each_area;
}

int EACH_AREA_Decision(int snd_stk[], int each_area[])//各水溜まりの面積を求めた時点で、それ以前にその水溜まりより高い水溜まりがないかを確認する。
{
	int share_count = 0,
		number = 0,
		pool_number = 0,
		f_cnt = 0;

	while (1) {
		pool_number++;
		number++;
		if (each_area[number] == 0) {
			break;
		}
	}
	
	pool_number -= 1;
	share_count = 1;

	while ( (pool_number - share_count) != -1) {
		if (snd_stk[pool_number] <= snd_stk[pool_number - share_count]) {//判定した水溜まりと同じ以上の高さがあれば結合する。
			for (f_cnt = 0; f_cnt < share_count; f_cnt++) {
				each_area[pool_number - share_count] += each_area[pool_number - f_cnt];//判定されたほうに入れていく
				snd_stk[pool_number - f_cnt] = 0;//snd_stk[]の結合した部分を初期化
			}



			while (each_area[pool_number - share_count] != 0) {//結合して手前に移動した水溜まりより後の数値を初期化する。
				each_area[pool_number - share_count + 1] = 0;
					share_count--;
			}

			break;
		}
		share_count++;//判定したところから結合した部分の終わりまで
	}

	return f_cnt;
}


int main(void)
{

	int fst_stk[MAX] = { 0 }, f_idx = 0,
		snd_stk[MAX] = { 0 }, s_idx = 0,
		each_area[MAX] = { 0 }, e_idx = 0,
		e_e_area[MAX] = { 0 }, e_e_idx = 0,
		ALL_area = 0;

	int i_idx = 0,
		d_count = 0,
		f_cnt,
		distance = 0;


	char input[MAX];

	fgets(input, MAX, stdin);


	while (input[i_idx] != '\n') {

		switch (input[i_idx]) {
		case '\\':
			d_count++;
			fst_stk[f_idx] = d_count;
			f_idx++;
			i_idx++;
			break;


		case '/':
			fst_stk[f_idx] = d_count;

			for (f_cnt = f_idx - 1; f_cnt >= 0; f_cnt--) {
				distance++;
				if (fst_stk[f_idx] == fst_stk[f_cnt]) {
					e_e_area[e_e_idx] = distance;
					e_e_idx++;
					snd_stk[s_idx] = d_count;//水溜まりの深さを一時的に格納
					s_idx++;
					distance = 0;//次に使うために初期化
					break;
				}
			}

			if (input[i_idx + 1] != '/') {
				each_area[e_idx] = EACH_AREA_Calculation(e_e_area, e_e_idx);
				e_idx++;
				e_e_idx = 0;

				f_cnt = EACH_AREA_Decision(snd_stk, each_area);//水溜まりを結合していた場合、帳尻を合わせる
				s_idx -= f_cnt;
				e_idx -= f_cnt;//結合した分の帳尻を合わせる

			}

			d_count--;
			f_idx++;
			i_idx++;

			break;


		case '_':
			d_count++;
			fst_stk[f_idx] = d_count;
			f_idx++;
			i_idx++;
			if (input[i_idx + 1] != '_') {
				d_count--;
			}
			break;

		}
	}

	for (f_cnt = 0; f_cnt < e_idx; f_cnt++) {
		ALL_area += each_area[f_cnt];
	}

	printf("%d\n", ALL_area);
	printf("%d", e_idx);

	for (f_cnt = 0; f_cnt < e_idx; f_cnt++) {
		printf(" %d", each_area[f_cnt]);
	}
	putchar('\n');

	return 0;
}

