while(True):

    s = eval(input())

    m = len(s)

    if s == "0":

        quit()

    dp = [[0 for j in range(11)] for i in range(m)]

    for i in range(m):

        n = int(s[i])

        if n == 0:

            tmp = dp[i-1][1:]

            tmp.reverse()

            dp[i] = [dp[i-1][0]]+tmp

        else:

            tmp = dp[i-1][1:]

            tmp.reverse()

            tmp = [dp[i-1][0]]+tmp

            dp[i] = tmp[-n:]+tmp[:-n]

            dp[i][n] += 1

    ans = 0

    for i in range(m):

        ans += dp[i][0]

    print(ans)



#教室内の位置は右*中央

#問題は「Eleven Lover」(http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=2182&lang=jp)

#本当は問題「Planning Rolling Blackouts」(http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=1176&lang=jp)

#を解こうとしたのですが、小区間での分割をひたすら統合する解法までは立ったものの実装力がなかったので一旦やめました

while(True):

    #今回はinputの数字を文字列として一桁ずつ扱った方が嬉しいのでint()しません

    s = eval(input())

    m = len(s)

    #0を弾くやつ

    if s == "0":

        quit()

    #pdfに書いていた方針と全く同じやり方をします

    #配列dpをA_i,jとしてとります

    dp = [[0 for j in range(11)] for i in range(m)]

    for i in range(m):

        n = int(s[i])

        #ここで、どこかの桁が0になってる時に注意します

        #というのも、問題文中に「0から始まる数は11の倍数に含めない」としてあるからです

        #したがって0が出た時はそこまでの数字を10倍する効果しか持たないことになります

        if n == 0:

            tmp = dp[i-1][1:]

            tmp.reverse()

            #dp[i][0]=dp[i-1][0]

            #dp[i][k]=dp[i-1][11-k] (if k >= 1)となります(これがtmp.reverse()の意図)

            dp[i] = [dp[i-1][0]]+tmp

        else:

            #やるだけ

            tmp = dp[i-1][1:]

            tmp.reverse()

            #10倍なのでA[i][k] (k>=1)をリバース(上と同じ)

            tmp = [dp[i-1][0]]+tmp

            #i桁目の数字を見てその分A_i,jをずらします

            #添字に注意

            dp[i] = tmp[-n:]+tmp[:-n]

            dp[i][n] += 1 #インクリメントも忘れずに

    #あとはdp[k][0]を足すだけ

    print((sum([i[0] for i in dp])))



while True:
    s = eval(input())
    m = len(s)
    if s == "0":
        quit()
    dp = [[0 for j in range(11)] for i in range(m)]
    for i in range(m):
        n = int(s[i])
        if n == 0:
            tmp = dp[i - 1][1:]
            tmp.reverse()
            dp[i] = [dp[i - 1][0]] + tmp
        else:
            tmp = dp[i - 1][1:]
            tmp.reverse()
            tmp = [dp[i - 1][0]] + tmp
            dp[i] = tmp[-n:] + tmp[:-n]
            dp[i][n] += 1
    ans = 0
    for i in range(m):
        ans += dp[i][0]
    print(ans)

# 教室内の位置は右*中央
# 問題は「Eleven Lover」(http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=2182&lang=jp)
# 本当は問題「Planning Rolling Blackouts」(http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=1176&lang=jp)
# を解こうとしたのですが、小区間での分割をひたすら統合する解法までは立ったものの実装力がなかったので一旦やめました
while True:
    # 今回はinputの数字を文字列として一桁ずつ扱った方が嬉しいのでint()しません
    s = eval(input())
    m = len(s)
    # 0を弾くやつ
    if s == "0":
        quit()
    # pdfに書いていた方針と全く同じやり方をします
    # 配列dpをA_i,jとしてとります
    dp = [[0 for j in range(11)] for i in range(m)]
    for i in range(m):
        n = int(s[i])
        # ここで、どこかの桁が0になってる時に注意します
        # というのも、問題文中に「0から始まる数は11の倍数に含めない」としてあるからです
        # したがって0が出た時はそこまでの数字を10倍する効果しか持たないことになります
        if n == 0:
            tmp = dp[i - 1][1:]
            tmp.reverse()
            # dp[i][0]=dp[i-1][0]
            # dp[i][k]=dp[i-1][11-k] (if k >= 1)となります(これがtmp.reverse()の意図)
            dp[i] = [dp[i - 1][0]] + tmp
        else:
            # やるだけ
            tmp = dp[i - 1][1:]
            tmp.reverse()
            # 10倍なのでA[i][k] (k>=1)をリバース(上と同じ)
            tmp = [dp[i - 1][0]] + tmp
            # i桁目の数字を見てその分A_i,jをずらします
            # 添字に注意
            dp[i] = tmp[-n:] + tmp[:-n]
            dp[i][n] += 1  # インクリメントも忘れずに
    # あとはdp[k][0]を足すだけ
    print((sum([i[0] for i in dp])))

+# 教室内の位置は右*中央 +# 問題は「Eleven Lover」(http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=2182&lang=jp) +# 本当は問題「Planning Rolling Blackouts」(http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=1176&lang=jp) +# を解こうとしたのですが、小区間での分割をひたすら統合する解法までは立ったものの実装力がなかったので一旦やめました +    # 今回はinputの数字を文字列として一桁ずつ扱った方が嬉しいのでint()しません +    # 0を弾くやつ +    # pdfに書いていた方針と全く同じやり方をします +    # 配列dpをA_i,jとしてとります +        # ここで、どこかの桁が0になってる時に注意します +        # というのも、問題文中に「0から始まる数は11の倍数に含めない」としてあるからです +        # したがって0が出た時はそこまでの数字を10倍する効果しか持たないことになります +            # dp[i][0]=dp[i-1][0] +            # dp[i][k]=dp[i-1][11-k] (if k >= 1)となります(これがtmp.reverse()の意図) +            # やるだけ +            # 10倍なのでA[i][k] (k>=1)をリバース(上と同じ) +            # i桁目の数字を見てその分A_i,jをずらします +            # 添字に注意 -            dp[i][n] += 1 -    ans = 0 -    for i in range(m): -        ans += dp[i][0] -    print(ans) +            dp[i][n] += 1  # インクリメントも忘れずに +    # あとはdp[k][0]を足すだけ +    print((sum([i[0] for i in dp])))