S = input()

# ■のマスは2, ▲のマスは1でカウントする

def scan_forward(F:list, S):

    depth = 0  # 深さ（開始点を基準）
    start = 0  # 「池」が始まった高さ
    is_pond = True  # 池が始まっているか？

    for s in S:
        if s == '\\':  # 下り
            if not is_pond:
                is_pond = True
                start = depth
            depth -= 1
            F.append(2*(start - depth) - 1)
            continue

        if s == "/":  # 上り
            depth += 1
            if start < depth:  # 池の開始位置より高くなった場合
                is_pond = False
                F.append(0)
                continue
            else:
                F.append(2*(start - depth) + 1)

        if s == "_":
            if is_pond:
                F.append(2*(start - depth))
            else:
                F.append(0)

def scan_backward(B:list, S):
    
    depth = 0  # 深さ（開始点を基準）
    start = 0  # 「池」が始まった高さ
    is_pond = True  # 池が始まっているか？

    for s in S:
        if s == '/':  # 下り
            if not is_pond:
                is_pond = True
                start = depth
            depth -= 1
            B.append(2*(start - depth) - 1)
            continue

        if s == "\\":  # 上り
            depth += 1
            if start < depth:  # 現在地が池の開始位置より高い場合
                is_pond = False # 「池」終了
                B.append(0)
                continue
            B.append(2*(start - depth) + 1)

        if s == "_":
            if is_pond:
                B.append(2*(start - depth))
            else:
                B.append(0)

def count_pond(FB):
    
    P = []

    is_pond = False
    count = 0
    amount = 0
    all_amount = 0
    for i in range(len(FB)):
        all_amount += FB[i]
        if is_pond:  # 池の途中
            amount += FB[i]
            if FB[i] == 1:
                is_pond = False  # ここで一旦終了
                P.append(amount//2)
        else:  # 池でなくなった場合
            if FB[i] == 0: continue
            count += 1
            is_pond = True
            amount = FB[i]
    
    return all_amount//2, count, P

F = []
scan_forward(F, S)

B = []
scan_backward(B, reversed(S))
B.reverse()
# print(F)  # 順方向にスキャンした結果
# print(B)  # 逆方向にスキャンした結果

FB = [0]*len(F)
# print(len(F), len(B))

for i in range(len(F)):
    FB[i] = min(F[i], B[i])


# print(FB)  # 水量

aa, k, P = count_pond(FB)
print(aa)
if k == 0:
    print(k)
else:
    print(k, " ".join(list(map(str, P)))) S = input() S input() input def scan_forward(F:list, S):

    depth = 0  # 深さ（開始点を基準）
    start = 0  # 「池」が始まった高さ
    is_pond = True  # 池が始まっているか？

    for s in S:
        if s == '\\':  # 下り
            if not is_pond:
                is_pond = True
                start = depth
            depth -= 1
            F.append(2*(start - depth) - 1)
            continue

        if s == "/":  # 上り
            depth += 1
            if start < depth:  # 池の開始位置より高くなった場合
                is_pond = False
                F.append(0)
                continue
            else:
                F.append(2*(start - depth) + 1)

        if s == "_":
            if is_pond:
                F.append(2*(start - depth))
            else:
                F.append(0) scan_forward depth = 0 depth 0 start = 0 start 0 is_pond = True is_pond True for s in S:
        if s == '\\':  # 下り
            if not is_pond:
                is_pond = True
                start = depth
            depth -= 1
            F.append(2*(start - depth) - 1)
            continue

        if s == "/":  # 上り
            depth += 1
            if start < depth:  # 池の開始位置より高くなった場合
                is_pond = False
                F.append(0)
                continue
            else:
                F.append(2*(start - depth) + 1)

        if s == "_":
            if is_pond:
                F.append(2*(start - depth))
            else:
                F.append(0) s S if s == '\\':  # 下り
            if not is_pond:
                is_pond = True
                start = depth
            depth -= 1
            F.append(2*(start - depth) - 1)
            continue

         s == '\\' s '\\' if not is_pond:
                is_pond = True
                start = depth
             not is_pond is_pond is_pond = True is_pond True start = depth start depth depth -= 1 depth 1 F.append(2*(start - depth) - 1) F.append F append 2*(start - depth) - 1 2*(start - depth) 2 start - depth start depth 1 continue if s == "/":  # 上り
            depth += 1
            if start < depth:  # 池の開始位置より高くなった場合
                is_pond = False
                F.append(0)
                continue
            else:
                F.append(2*(start - depth) + 1)

         s == "/" s "/" depth += 1 depth 1 if start < depth:  # 池の開始位置より高くなった場合
                is_pond = False
                F.append(0)
                continue
            else:
                F.append(2*(start - depth) + 1)

         start < depth start depth is_pond = False is_pond False F.append(0) F.append F append 0 continue F.append(2*(start - depth) + 1) F.append F append 2*(start - depth) + 1 2*(start - depth) 2 start - depth start depth 1 if s == "_":
            if is_pond:
                F.append(2*(start - depth))
            else:
                F.append(0) s == "_" s "_" if is_pond:
                F.append(2*(start - depth))
            else:
                F.append(0) is_pond F.append(2*(start - depth)) F.append F append 2*(start - depth) 2 start - depth start depth F.append(0) F.append F append 0 F:list F S S def scan_backward(B:list, S):
    
    depth = 0  # 深さ（開始点を基準）
    start = 0  # 「池」が始まった高さ
    is_pond = True  # 池が始まっているか？

    for s in S:
        if s == '/':  # 下り
            if not is_pond:
                is_pond = True
                start = depth
            depth -= 1
            B.append(2*(start - depth) - 1)
            continue

        if s == "\\":  # 上り
            depth += 1
            if start < depth:  # 現在地が池の開始位置より高い場合
                is_pond = False # 「池」終了
                B.append(0)
                continue
            B.append(2*(start - depth) + 1)

        if s == "_":
            if is_pond:
                B.append(2*(start - depth))
            else:
                B.append(0) scan_backward depth = 0 depth 0 start = 0 start 0 is_pond = True is_pond True for s in S:
        if s == '/':  # 下り
            if not is_pond:
                is_pond = True
                start = depth
            depth -= 1
            B.append(2*(start - depth) - 1)
            continue

        if s == "\\":  # 上り
            depth += 1
            if start < depth:  # 現在地が池の開始位置より高い場合
                is_pond = False # 「池」終了
                B.append(0)
                continue
            B.append(2*(start - depth) + 1)

        if s == "_":
            if is_pond:
                B.append(2*(start - depth))
            else:
                B.append(0) s S if s == '/':  # 下り
            if not is_pond:
                is_pond = True
                start = depth
            depth -= 1
            B.append(2*(start - depth) - 1)
            continue

         s == '/' s '/' if not is_pond:
                is_pond = True
                start = depth
             not is_pond is_pond is_pond = True is_pond True start = depth start depth depth -= 1 depth 1 B.append(2*(start - depth) - 1) B.append B append 2*(start - depth) - 1 2*(start - depth) 2 start - depth start depth 1 continue if s == "\\":  # 上り
            depth += 1
            if start < depth:  # 現在地が池の開始位置より高い場合
                is_pond = False # 「池」終了
                B.append(0)
                continue
            B.append(2*(start - depth) + 1)

         s == "\\" s "\\" depth += 1 depth 1 if start < depth:  # 現在地が池の開始位置より高い場合
                is_pond = False # 「池」終了
                B.append(0)
                continue
             start < depth start depth is_pond = False is_pond False B.append(0) B.append B append 0 continue B.append(2*(start - depth) + 1) B.append B append 2*(start - depth) + 1 2*(start - depth) 2 start - depth start depth 1 if s == "_":
            if is_pond:
                B.append(2*(start - depth))
            else:
                B.append(0) s == "_" s "_" if is_pond:
                B.append(2*(start - depth))
            else:
                B.append(0) is_pond B.append(2*(start - depth)) B.append B append 2*(start - depth) 2 start - depth start depth B.append(0) B.append B append 0 B:list B S S def count_pond(FB):
    
    P = []

    is_pond = False
    count = 0
    amount = 0
    all_amount = 0
    for i in range(len(FB)):
        all_amount += FB[i]
        if is_pond:  # 池の途中
            amount += FB[i]
            if FB[i] == 1:
                is_pond = False  # ここで一旦終了
                P.append(amount//2)
        else:  # 池でなくなった場合
            if FB[i] == 0: continue
            count += 1
            is_pond = True
            amount = FB[i]
    
    return all_amount//2, count, P count_pond P = [] P [] is_pond = False is_pond False count = 0 count 0 amount = 0 amount 0 all_amount = 0 all_amount 0 for i in range(len(FB)):
        all_amount += FB[i]
        if is_pond:  # 池の途中
            amount += FB[i]
            if FB[i] == 1:
                is_pond = False  # ここで一旦終了
                P.append(amount//2)
        else:  # 池でなくなった場合
            if FB[i] == 0: continue
            count += 1
            is_pond = True
            amount = FB[i]
    
     i range(len(FB)) range len(FB) len FB all_amount += FB[i] all_amount FB[i] FB i if is_pond:  # 池の途中
            amount += FB[i]
            if FB[i] == 1:
                is_pond = False  # ここで一旦終了
                P.append(amount//2)
        else:  # 池でなくなった場合
            if FB[i] == 0: continue
            count += 1
            is_pond = True
            amount = FB[i]
    
     is_pond amount += FB[i] amount FB[i] FB i if FB[i] == 1:
                is_pond = False  # ここで一旦終了
                P.append(amount//2)
         FB[i] == 1 FB[i] FB i 1 is_pond = False is_pond False P.append(amount//2) P.append P append amount//2 amount 2 if FB[i] == 0: continue
             FB[i] == 0 FB[i] FB i 0 count += 1 count 1 is_pond = True is_pond True amount = FB[i] amount FB[i] FB i return all_amount//2, count, P return all_amount//2, count, P all_amount//2 all_amount 2 count P FB FB F = [] F [] scan_forward(F, S) scan_forward F S B = [] B [] scan_backward(B, reversed(S)) scan_backward B reversed(S) reversed S B.reverse() B.reverse B reverse FB = [0]*len(F) FB [0]*len(F) [0] 0 len(F) len F for i in range(len(F)):
    FB[i] = min(F[i], B[i])


# print(FB)  # 水量 i range(len(F)) range len(F) len F FB[i] = min(F[i], B[i]) FB[i] FB i min(F[i], B[i]) min F[i] F i B[i] B i aa, k, P = count_pond(FB) aa count_pond(FB) count_pond FB k P print(aa) print aa if k == 0:
    print(k)
else:
    print(k, " ".join(list(map(str, P)))) k == 0 k 0 print(k) print k print(k, " ".join(list(map(str, P)))) print k " ".join(list(map(str, P))) " ".join " " join list(map(str, P)) list map(str, P) map str P def scan_forward(F:list, S):

    depth = 0  # 深さ（開始点を基準）
    start = 0  # 「池」が始まった高さ
    is_pond = True  # 池が始まっているか？

    for s in S:
        if s == '\\':  # 下り
            if not is_pond:
                is_pond = True
                start = depth
            depth -= 1
            F.append(2*(start - depth) - 1)
            continue

        if s == "/":  # 上り
            depth += 1
            if start < depth:  # 池の開始位置より高くなった場合
                is_pond = False
                F.append(0)
                continue
            else:
                F.append(2*(start - depth) + 1)

        if s == "_":
            if is_pond:
                F.append(2*(start - depth))
            else:
                F.append(0) def scan_forward(F:list, S):

    depth = 0  # 深さ（開始点を基準）
    start = 0  # 「池」が始まった高さ
    is_pond = True  # 池が始まっているか？

    for s in S:
        if s == '\\':  # 下り
            if not is_pond:
                is_pond = True
                start = depth
            depth -= 1
            F.append(2*(start - depth) - 1)
            continue

        if s == "/":  # 上り
            depth += 1
            if start < depth:  # 池の開始位置より高くなった場合
                is_pond = False
                F.append(0)
                continue
            else:
                F.append(2*(start - depth) + 1)

        if s == "_":
            if is_pond:
                F.append(2*(start - depth))
            else:
                F.append(0) scan_forward k, P = count_pond(FB) count_pond(FB) k P = count_pond(FB) count_pond(FB) P def count_pond(FB):
    
    P = []

    is_pond = False
    count = 0
    amount = 0
    all_amount = 0
    for i in range(len(FB)):
        all_amount += FB[i]
        if is_pond:  # 池の途中
            amount += FB[i]
            if FB[i] == 1:
                is_pond = False  # ここで一旦終了
                P.append(amount//2)
        else:  # 池でなくなった場合
            if FB[i] == 0: continue
            count += 1
            is_pond = True
            amount = FB[i]
    
    return all_amount//2, count, P def count_pond(FB):
    
    P = []

    is_pond = False
    count = 0
    amount = 0
    all_amount = 0
    for i in range(len(FB)):
        all_amount += FB[i]
        if is_pond:  # 池の途中
            amount += FB[i]
            if FB[i] == 1:
                is_pond = False  # ここで一旦終了
                P.append(amount//2)
        else:  # 池でなくなった場合
            if FB[i] == 0: continue
            count += 1
            is_pond = True
            amount = FB[i]
    
    return all_amount//2, count, P count_pond F = [] [] F aa, k, P = count_pond(FB) count_pond(FB) aa S = input() input() S FB = [0]*len(F) [0]*len(F) FB def scan_backward(B:list, S):
    
    depth = 0  # 深さ（開始点を基準）
    start = 0  # 「池」が始まった高さ
    is_pond = True  # 池が始まっているか？

    for s in S:
        if s == '/':  # 下り
            if not is_pond:
                is_pond = True
                start = depth
            depth -= 1
            B.append(2*(start - depth) - 1)
            continue

        if s == "\\":  # 上り
            depth += 1
            if start < depth:  # 現在地が池の開始位置より高い場合
                is_pond = False # 「池」終了
                B.append(0)
                continue
            B.append(2*(start - depth) + 1)

        if s == "_":
            if is_pond:
                B.append(2*(start - depth))
            else:
                B.append(0) def scan_backward(B:list, S):
    
    depth = 0  # 深さ（開始点を基準）
    start = 0  # 「池」が始まった高さ
    is_pond = True  # 池が始まっているか？

    for s in S:
        if s == '/':  # 下り
            if not is_pond:
                is_pond = True
                start = depth
            depth -= 1
            B.append(2*(start - depth) - 1)
            continue

        if s == "\\":  # 上り
            depth += 1
            if start < depth:  # 現在地が池の開始位置より高い場合
                is_pond = False # 「池」終了
                B.append(0)
                continue
            B.append(2*(start - depth) + 1)

        if s == "_":
            if is_pond:
                B.append(2*(start - depth))
            else:
                B.append(0) scan_backward B = [] [] B
S = input()

# ■のマスは2, ▲のマスは1でカウントする

def scan_forward(F:list, S):

    depth = 0  # 深さ（開始点を基準）
    start = 0  # 「池」が始まった高さ
    is_pond = True  # 池が始まっているか？

    for s in S:
        if s == '\\':  # 下り
            if not is_pond:
                is_pond = True
                start = depth
            depth -= 1
            F.append(2*(start - depth) - 1)
            continue

        if s == "/":  # 上り
            depth += 1
            if start < depth:  # 池の開始位置より高くなった場合
                is_pond = False
                F.append(0)
                continue
            else:
                F.append(2*(start - depth) + 1)

        if s == "_":
            if is_pond:
                F.append(2*(start - depth))
            else:
                F.append(0)

def scan_backward(B:list, S):
    
    depth = 0  # 深さ（開始点を基準）
    start = 0  # 「池」が始まった高さ
    is_pond = True  # 池が始まっているか？

    for s in S:
        if s == '/':  # 下り
            if not is_pond:
                is_pond = True
                start = depth
            depth -= 1
            B.append(2*(start - depth) - 1)
            continue

        if s == "\\":  # 上り
            depth += 1
            if start < depth:  # 現在地が池の開始位置より高い場合
                is_pond = False # 「池」終了
                B.append(0)
                continue
            B.append(2*(start - depth) + 1)

        if s == "_":
            if is_pond:
                B.append(2*(start - depth))
            else:
                B.append(0)

def count_pond(FB):
    
    P = []

    is_pond = False
    count = 0
    amount = 0
    all_amount = 0
    for i in range(len(FB)):
        all_amount += FB[i]
        if is_pond:  # 池の途中
            amount += FB[i]
            if FB[i] == 1:
                is_pond = False  # ここで一旦終了
                P.append(amount//2)
        else:  # 池でなくなった場合
            if FB[i] == 0: continue
            count += 1
            is_pond = True
            amount = FB[i]
    
    return all_amount//2, count, P

F = []
scan_forward(F, S)

B = []
scan_backward(B, reversed(S))
B.reverse()
# print(F)  # 順方向にスキャンした結果
# print(B)  # 逆方向にスキャンした結果

FB = [0]*len(F)
# print(len(F), len(B))

for i in range(len(F)):
    FB[i] = min(F[i], B[i])


# print(FB)  # 水量

aa, k, P = count_pond(FB)
print(aa)
if k == 0:
    print(k)
else:
    print(k, " ".join(list(map(str, P))))
