# ALDS1_3_D.

def show(a):
    # 配列の中身を出力する。
    _str = ""
    for i in range(len(a) - 1):
        _str += str(a[i]) + " "
    _str += str(a[len(a) - 1])
    print(_str)

def main():
    data = list(input())
    a = []  # '\\'の位置を格納していく。
    b = []  # 同じだが、池の集約に使う。
    ponds = []  # 池の面積のリスト(必要に応じて集約).
    Area = 0  # 総面積
    N = len(data)
    for i in range(N):
        if data[i] == '\\':
            a.append(i); b.append(i)
        elif data[i] == '/':
            if len(a) == 0: continue
            else:
                left = a.pop()  # '/'と対になる'\\'の位置
                Area += i - left
                ponds.append(i - left)
                # leftより右にあるbの元を先頭から見てあればカット、
                # その分だけpondsを集約する。
                while left < b[len(b) - 1]:
                    b.pop()
                    x = ponds.pop(); y = ponds.pop(); ponds.append(x + y)
    print(Area)
    ponds.insert(0, len(ponds))
    show(ponds)
    
if __name__ == "__main__":
    main() def show(a):
    # 配列の中身を出力する。
    _str = ""
    for i in range(len(a) - 1):
        _str += str(a[i]) + " "
    _str += str(a[len(a) - 1])
    print(_str) show _str = "" _str "" for i in range(len(a) - 1):
        _str += str(a[i]) + " "
     i range(len(a) - 1) range len(a) - 1 len(a) len a 1 _str += str(a[i]) + " " _str str(a[i]) + " " str(a[i]) str a[i] a i " " _str += str(a[len(a) - 1]) _str str(a[len(a) - 1]) str a[len(a) - 1] a len(a) - 1 len(a) len a 1 print(_str) print _str a a def main():
    data = list(input())
    a = []  # '\\'の位置を格納していく。
    b = []  # 同じだが、池の集約に使う。
    ponds = []  # 池の面積のリスト(必要に応じて集約).
    Area = 0  # 総面積
    N = len(data)
    for i in range(N):
        if data[i] == '\\':
            a.append(i); b.append(i)
        elif data[i] == '/':
            if len(a) == 0: continue
            else:
                left = a.pop()  # '/'と対になる'\\'の位置
                Area += i - left
                ponds.append(i - left)
                # leftより右にあるbの元を先頭から見てあればカット、
                # その分だけpondsを集約する。
                while left < b[len(b) - 1]:
                    b.pop()
                    x = ponds.pop(); y = ponds.pop(); ponds.append(x + y)
    print(Area)
    ponds.insert(0, len(ponds))
    show(ponds)
     main data = list(input()) data list(input()) list input() input a = [] a [] b = [] b [] ponds = [] ponds [] Area = 0 Area 0 N = len(data) N len(data) len data for i in range(N):
        if data[i] == '\\':
            a.append(i); b.append(i)
        elif data[i] == '/':
            if len(a) == 0: continue
            else:
                left = a.pop()  # '/'と対になる'\\'の位置
                Area += i - left
                ponds.append(i - left)
                # leftより右にあるbの元を先頭から見てあればカット、
                # その分だけpondsを集約する。
                while left < b[len(b) - 1]:
                    b.pop()
                    x = ponds.pop(); y = ponds.pop(); ponds.append(x + y)
     i range(N) range N if data[i] == '\\':
            a.append(i); b.append(i)
        elif data[i] == '/':
            if len(a) == 0: continue
            else:
                left = a.pop()  # '/'と対になる'\\'の位置
                Area += i - left
                ponds.append(i - left)
                # leftより右にあるbの元を先頭から見てあればカット、
                # その分だけpondsを集約する。
                while left < b[len(b) - 1]:
                    b.pop()
                    x = ponds.pop(); y = ponds.pop(); ponds.append(x + y)
     data[i] == '\\' data[i] data i '\\' a.append(i) a.append a append i b.append(i) b.append b append i elif data[i] == '/':
            if len(a) == 0: continue
            else:
                left = a.pop()  # '/'と対になる'\\'の位置
                Area += i - left
                ponds.append(i - left)
                # leftより右にあるbの元を先頭から見てあればカット、
                # その分だけpondsを集約する。
                while left < b[len(b) - 1]:
                    b.pop()
                    x = ponds.pop(); y = ponds.pop(); ponds.append(x + y)
     data[i] == '/' data[i] data i '/' if len(a) == 0: continue
            else:
                left = a.pop()  # '/'と対になる'\\'の位置
                Area += i - left
                ponds.append(i - left)
                # leftより右にあるbの元を先頭から見てあればカット、
                # その分だけpondsを集約する。
                while left < b[len(b) - 1]:
                    b.pop()
                    x = ponds.pop(); y = ponds.pop(); ponds.append(x + y)
     len(a) == 0 len(a) len a 0 left = a.pop() left a.pop() a.pop a pop Area += i - left Area i - left i left ponds.append(i - left) ponds.append ponds append i - left i left while left < b[len(b) - 1]:
                    b.pop()
                    x = ponds.pop(); y = ponds.pop(); ponds.append(x + y)
     left < b[len(b) - 1] left b[len(b) - 1] b len(b) - 1 len(b) len b 1 b.pop() b.pop b pop x = ponds.pop() x ponds.pop() ponds.pop ponds pop y = ponds.pop() y ponds.pop() ponds.pop ponds pop ponds.append(x + y) ponds.append ponds append x + y x y print(Area) print Area ponds.insert(0, len(ponds)) ponds.insert ponds insert 0 len(ponds) len ponds show(ponds) show ponds if __name__ == "__main__":
    main() __name__ == "__main__" __name__ "__main__" main() main def main():
    data = list(input())
    a = []  # '\\'の位置を格納していく。
    b = []  # 同じだが、池の集約に使う。
    ponds = []  # 池の面積のリスト(必要に応じて集約).
    Area = 0  # 総面積
    N = len(data)
    for i in range(N):
        if data[i] == '\\':
            a.append(i); b.append(i)
        elif data[i] == '/':
            if len(a) == 0: continue
            else:
                left = a.pop()  # '/'と対になる'\\'の位置
                Area += i - left
                ponds.append(i - left)
                # leftより右にあるbの元を先頭から見てあればカット、
                # その分だけpondsを集約する。
                while left < b[len(b) - 1]:
                    b.pop()
                    x = ponds.pop(); y = ponds.pop(); ponds.append(x + y)
    print(Area)
    ponds.insert(0, len(ponds))
    show(ponds)
     def main():
    data = list(input())
    a = []  # '\\'の位置を格納していく。
    b = []  # 同じだが、池の集約に使う。
    ponds = []  # 池の面積のリスト(必要に応じて集約).
    Area = 0  # 総面積
    N = len(data)
    for i in range(N):
        if data[i] == '\\':
            a.append(i); b.append(i)
        elif data[i] == '/':
            if len(a) == 0: continue
            else:
                left = a.pop()  # '/'と対になる'\\'の位置
                Area += i - left
                ponds.append(i - left)
                # leftより右にあるbの元を先頭から見てあればカット、
                # その分だけpondsを集約する。
                while left < b[len(b) - 1]:
                    b.pop()
                    x = ponds.pop(); y = ponds.pop(); ponds.append(x + y)
    print(Area)
    ponds.insert(0, len(ponds))
    show(ponds)
     main def show(a):
    # 配列の中身を出力する。
    _str = ""
    for i in range(len(a) - 1):
        _str += str(a[i]) + " "
    _str += str(a[len(a) - 1])
    print(_str) def show(a):
    # 配列の中身を出力する。
    _str = ""
    for i in range(len(a) - 1):
        _str += str(a[i]) + " "
    _str += str(a[len(a) - 1])
    print(_str) show
# ALDS1_3_D.

def show(a):
    # 配列の中身を出力する。
    _str = ""
    for i in range(len(a) - 1):
        _str += str(a[i]) + " "
    _str += str(a[len(a) - 1])
    print(_str)

def main():
    data = list(input())
    a = []  # '\\'の位置を格納していく。
    b = []  # 同じだが、池の集約に使う。
    ponds = []  # 池の面積のリスト(必要に応じて集約).
    Area = 0  # 総面積
    N = len(data)
    for i in range(N):
        if data[i] == '\\':
            a.append(i); b.append(i)
        elif data[i] == '/':
            if len(a) == 0: continue
            else:
                left = a.pop()  # '/'と対になる'\\'の位置
                Area += i - left
                ponds.append(i - left)
                # leftより右にあるbの元を先頭から見てあればカット、
                # その分だけpondsを集約する。
                while left < b[len(b) - 1]:
                    b.pop()
                    x = ponds.pop(); y = ponds.pop(); ponds.append(x + y)
    print(Area)
    ponds.insert(0, len(ponds))
    show(ponds)
    
if __name__ == "__main__":
    main()
