#include <stdio.h>
#include <stdlib.h>

/*
  * 戦略
  * 左端から調査する。
  * 下がり始める地点を起点として記録
  * 同じ高さの地点が表われたら、そこまでで1チャンクである
  *  水面が初期高さなので、各セグメントごとに深さと底面の状態に応じて足し込んでいく
  * 同じ高さの地点がなければ、最も高かった頂点(もしくは台地の左端)を中点とする
  *  起点から最も近い中点と同じ高さの地点を新たな起点として、1チャンクを算出する
  * 1チャンクの算出後、中点以降の下がり始める点を起点としてくり返す
  * 頂点もしくは台地の左端が表れなければ、それ以降にチャンクがないので終了
  *
  * 左から順に調べればいいので各データはキューとして扱う
  * セグメントを調べるとき、左端にいると考える。
  *  高さPからval=-1なら水面Hに対してH-P+0.5、val=0ならH-P、val=1ならH-P-0.5の水量となる
  *  水量は2倍値を持っておく(1マス=2)。
 */

#define H_MIN -200000

#ifdef DEBUG
#define  DPRINT printf
#else
#define DPRINT(...)
#endif

struct q {
	int val;
	struct q *next;
};

struct q *
chunk(struct q *from, struct q *to)
{
	struct q *res = (struct q *)malloc(sizeof(struct q));
	struct q *arg;
	int h = 0;

	if (res == NULL)
		return NULL;

	res->next = NULL;
	res->val = 0;

	for (arg = from; arg != NULL; arg = arg->next) {
		res->val -= h * 2 + arg->val;
		h += arg->val;
		if (arg == to)
			break;
	}

	return res;
}

int
main(void)
{
	struct q *head = NULL;
	struct q *tail = NULL;
	struct q *res_h = NULL;
	struct q *res_t = NULL;
	struct q *qm;
	int h0 = 0, h1= 0;
	int sum = 0;
	int n = 0;
	int hm;
	char c;

	while (scanf("%c", &c) != EOF) {
		struct q *a = (struct q *)malloc(sizeof(struct q));

		if (a == NULL)
			return 1;

		a->val = (c == '/') ? 1 : (c == '_') ? 0 : -1;
		a->next = NULL;

		if (head == NULL) {
			head = tail = a;
		} else {
			tail->next = a;
			tail = a;
		}
	}

	while (head != NULL) { /* チャンクを見つける */
		struct q *a;

		/* 起点 */
		for (;head != NULL; head = head->next) {
			if (head->val == -1)
				break;
		}
		if (head == NULL)
			break;

		h0 = h1= 0;
		hm = H_MIN;
		qm = NULL;
		/* 起点の高さを探索 */
		for (a = head; a != NULL; a = a->next) {
			h1 += a->val;
			if (h0 == h1)
				break;
			if (a->val == 1 && h1 > hm) {
				hm = h1;
				qm = a;
			}
		}
		DPRINT("h0=%d h1=%d\n", h0, h1);
		/* 起点の高さがない場合、次点を探索 */
		if (a == NULL) {
			if (qm == NULL)
				break;
			for (a = head; a != NULL; a = a->next) {
				if (h0 == hm)
					break;
				h0 += a->val;
			}
			head = a;
			a = qm;
		}
		/* チャンク */
		if (a != NULL) {
			struct q *v = chunk(head, a);

			if (v == NULL)
				return 1;

			sum += v->val;
			n++;
			if (res_h == NULL) {
				res_h = res_t = v;
			} else {
				res_t->next = v;
				res_t = v;
			}
		}

		head = a->next;
	}

	printf("%d\n%d", sum / 2, n);
	for (;res_h != NULL; res_h = res_h->next) {
		printf(" %d", res_h->val / 2, res_h->next == NULL ? "" : " ");
	}
	printf("\n");

	return 0;
}

