# -*- coding: utf-8 -*-

"""
stackの応用(水たまりの面積)
"""

from collections import deque

S = list(input())

# 総合面積
ans = 0
# 総合面積用スタック(直近の\の位置)
stack1 = deque()
# 個別用スタック(その水たまりを開始する\の位置, その時点での面積)
stack2 = deque()
for i in range(len(S)):
    if S[i] == '\\':
        stack1.append(i)
    # 一番最近いれた\を取り出せば、今回の/と対になる(同じ高さ)
    elif S[i] == '/' and stack1:
        # 両者の距離がその高さでの面積になる
        # (\/が三角形な分-1なのが半開区間だからちょうど合う)
        j = stack1.pop()
        ans += i - j

        # 各水たまりのマージ作業
        # stack2から、今回の合併候補を抽出
        # (条件：水たまりの開始位置が今回対になってる\より右側にある)
        pond = i - j
        while stack2 and stack2[-1][0] >= j:
            pond += stack2.pop()[1]
        # マージした水たまりの情報を詰める
        stack2.append([j, pond])
print(ans)
# リスト内包とアンパックできれいにまとまった
print(len(stack2), *[pond for j, pond in stack2])
 """
stackの応用(水たまりの面積)
""" from collections import deque S = list(input()) S list(input()) list input() input ans = 0 ans 0 stack1 = deque() stack1 deque() deque stack2 = deque() stack2 deque() deque for i in range(len(S)):
    if S[i] == '\\':
        stack1.append(i)
    # 一番最近いれた\を取り出せば、今回の/と対になる(同じ高さ)
    elif S[i] == '/' and stack1:
        # 両者の距離がその高さでの面積になる
        # (\/が三角形な分-1なのが半開区間だからちょうど合う)
        j = stack1.pop()
        ans += i - j

        # 各水たまりのマージ作業
        # stack2から、今回の合併候補を抽出
        # (条件：水たまりの開始位置が今回対になってる\より右側にある)
        pond = i - j
        while stack2 and stack2[-1][0] >= j:
            pond += stack2.pop()[1]
        # マージした水たまりの情報を詰める
        stack2.append([j, pond]) i range(len(S)) range len(S) len S if S[i] == '\\':
        stack1.append(i)
    # 一番最近いれた\を取り出せば、今回の/と対になる(同じ高さ)
    elif S[i] == '/' and stack1:
        # 両者の距離がその高さでの面積になる
        # (\/が三角形な分-1なのが半開区間だからちょうど合う)
        j = stack1.pop()
        ans += i - j

        # 各水たまりのマージ作業
        # stack2から、今回の合併候補を抽出
        # (条件：水たまりの開始位置が今回対になってる\より右側にある)
        pond = i - j
        while stack2 and stack2[-1][0] >= j:
            pond += stack2.pop()[1]
        # マージした水たまりの情報を詰める
        stack2.append([j, pond]) S[i] == '\\' S[i] S i '\\' stack1.append(i) stack1.append stack1 append i elif S[i] == '/' and stack1:
        # 両者の距離がその高さでの面積になる
        # (\/が三角形な分-1なのが半開区間だからちょうど合う)
        j = stack1.pop()
        ans += i - j

        # 各水たまりのマージ作業
        # stack2から、今回の合併候補を抽出
        # (条件：水たまりの開始位置が今回対になってる\より右側にある)
        pond = i - j
        while stack2 and stack2[-1][0] >= j:
            pond += stack2.pop()[1]
        # マージした水たまりの情報を詰める
        stack2.append([j, pond]) S[i] == '/' and stack1 S[i] == '/' S[i] S i '/' stack1 j = stack1.pop() j stack1.pop() stack1.pop stack1 pop ans += i - j ans i - j i j pond = i - j pond i - j i j while stack2 and stack2[-1][0] >= j:
            pond += stack2.pop()[1]
        # マージした水たまりの情報を詰める
         stack2 and stack2[-1][0] >= j stack2 stack2[-1][0] >= j stack2[-1][0] [-1] stack2 -1 0 j pond += stack2.pop()[1] pond stack2.pop()[1] stack2.pop() stack2.pop stack2 pop 1 stack2.append([j, pond]) stack2.append stack2 append [j, pond] j pond print(ans) print ans pond for j, pond in stack2 for j, pond in stack2 j pond stack2 for j, pond in stack2 pond print(len(stack2), *[pond for j, pond in stack2]) print len(stack2) len stack2 *[pond for j, pond in stack2] [pond for j, pond in stack2] stack1 = deque() deque() stack1 S = list(input()) list(input()) S j = stack1.pop() stack1.pop() j ans += i - j i - j ans ans = 0 0 ans pond = i - j i - j pond pond += stack2.pop()[1] stack2.pop()[1] pond stack2 = deque() deque() stack2
# -*- coding: utf-8 -*-

"""
stackの応用(水たまりの面積)
"""

from collections import deque

S = list(input())

# 総合面積
ans = 0
# 総合面積用スタック(直近の\の位置)
stack1 = deque()
# 個別用スタック(その水たまりを開始する\の位置, その時点での面積)
stack2 = deque()
for i in range(len(S)):
    if S[i] == '\\':
        stack1.append(i)
    # 一番最近いれた\を取り出せば、今回の/と対になる(同じ高さ)
    elif S[i] == '/' and stack1:
        # 両者の距離がその高さでの面積になる
        # (\/が三角形な分-1なのが半開区間だからちょうど合う)
        j = stack1.pop()
        ans += i - j

        # 各水たまりのマージ作業
        # stack2から、今回の合併候補を抽出
        # (条件：水たまりの開始位置が今回対になってる\より右側にある)
        pond = i - j
        while stack2 and stack2[-1][0] >= j:
            pond += stack2.pop()[1]
        # マージした水たまりの情報を詰める
        stack2.append([j, pond])
print(ans)
# リスト内包とアンパックできれいにまとまった
print(len(stack2), *[pond for j, pond in stack2])

