//空间、时间复杂度均为10n的二维dp写法(较暴力) 简单好抄(
#include<iostream>
#include<vector>
using namespace std;
typedef long long ll;
void solve() {
    string s;
    cin >> s;
    int n = s.size();
    s = " " + s;
    //个人习惯 从1~n方便转移
    vector<vector<ll>>cnt(n + 1, vector < ll>(10));
    //dp数组 **以第i个元素结尾且根为j的子数组数量**
    for (int i = 1; i <= n; i++) {
        int t = s[i] - '0';
        //遍历到当前数字
        for (int j = 0; j < 10; j++) {
            int d = t + j;
            //枚举所有可能转移到的根
            if (d >= 10)d -= 9;
            //t<=9 j<=9 若和为两位数 结果减去9即为根
            cnt[i][d] += cnt[i - 1][j];
            /*状态转移 以第i个元素结尾的所有子数组 就是以第i-1个元素结尾的所有
            子数组加上第i个元素 以及第i个元素本身(下一行的cnt[i][t] 别忘了加)*/

            /*例如:当前位数字为8 那么以当前位为结尾 且根为4的子数组数目可以通过
            以上一位为结尾 且根为5的子数组数目转移到*/
        }
        cnt[i][t]++;
    }
    ll ans = 0;
    //不开long long 只能过30%
    for (int i = 1; i <= n; i++) {
        for (int j = 0; j < 10; j++) {
            ans += cnt[i][j] * j;
            //将所有连续子区间的贡献拆解为 
            //sum(以第1~n个元素结尾的所有子区间贡献)
            //所得即为答案
        }
    }
    cout << ans << endl;
}
int main() {
    cin.tie(nullptr)->sync_with_stdio(false);
    int t = 1;
    cin >> t;
    while (t--) solve();
    return 0;
}