#include <bits/stdc++.h>
using namespace std;
#define ms(s,n) memset(s,n,sizeof(s))
#define all(a) a.begin(),a.end()
#define present(t, x) (t.find(x) != t.end())
#define sz(a) int((a).size())
#define FOR(i, a, b) for (int i = (a); i < (b); ++i)
#define FORd(i, a, b) for (int i = (a) - 1; i >= (b); --i)
#define pb push_back
#define pf push_front
#define fi first
#define se second
#define mp make_pair
#define endl "\n"
typedef long long ll;
typedef unsigned long long ull;
typedef long double ld;
typedef pair<int,int> pi;
typedef vector<int> vi;
typedef vector<pi> vii;
const int MOD = (int) 1e9+7;
const int INF = (int) 1e9+1;
inline ll gcd(ll a,ll b){ll r;while(b){r=a%b;a=b;b=r;}return a;}
inline ll lcm(ll a,ll b){return a/gcd(a,b)*b;}
bool cmp(pi a, pi b){
return a.se < b.se;
}
int num(char c){
return c - '0';
}
void TC(){
string s; cin >> s;
int len = s.length();
int dp[len+1][3];
int pre[len+1];
ms(dp, 0);
ms(pre, 0);
int sum = 0;
dp[0][0] = 1;
for(int i = 1; i <= len; i++){
sum += s[i-1]-'0';
sum %= 3;
pre[i] = sum;
dp[i][sum] += 1;
dp[i][0] += dp[i-1][0];
dp[i][1] += dp[i-1][1];
dp[i][2] += dp[i-1][2];
}
int ans = 0;
for(int i = 1; i <= len; i++){
int num = s[i-1] - '0';
if(num == 8) ++ans;
if(i >=2 ){
int tmp = (s[i-2] - '0') * 10 + (s[i-1] -'0');
if(tmp % 8 == 0 && tmp % 3 != 0){
++ans;
}
}
if(i >= 3){
int tmp = (s[i-3] - '0') * 100 +(s[i-2] - '0') * 10 + s[i-1] - '0';
if(tmp % 8 == 0){
ans += i - 2;
ans -= dp[i-3][pre[i]];
}
}
}
cout << ans << endl;
}
int main(){
//freopen("input.txt","r", stdin);
//freopen("output.txt","w",stdout);
ios::sync_with_stdio(false);
cin.tie(nullptr);
int t; cin >> t;
while(t--){
TC();
}
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKI2RlZmluZSBtcyhzLG4pIG1lbXNldChzLG4sc2l6ZW9mKHMpKQojZGVmaW5lIGFsbChhKSBhLmJlZ2luKCksYS5lbmQoKQojZGVmaW5lIHByZXNlbnQodCwgeCkgKHQuZmluZCh4KSAhPSB0LmVuZCgpKQojZGVmaW5lIHN6KGEpIGludCgoYSkuc2l6ZSgpKQojZGVmaW5lIEZPUihpLCBhLCBiKSBmb3IgKGludCBpID0gKGEpOyBpIDwgKGIpOyArK2kpCiNkZWZpbmUgRk9SZChpLCBhLCBiKSBmb3IgKGludCBpID0gKGEpIC0gMTsgaSA+PSAoYik7IC0taSkKI2RlZmluZSBwYiBwdXNoX2JhY2sKI2RlZmluZSBwZiBwdXNoX2Zyb250CiNkZWZpbmUgZmkgZmlyc3QKI2RlZmluZSBzZSBzZWNvbmQKI2RlZmluZSBtcCBtYWtlX3BhaXIKI2RlZmluZSBlbmRsICJcbiIKCgp0eXBlZGVmIGxvbmcgbG9uZyBsbDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgdWxsOwp0eXBlZGVmIGxvbmcgZG91YmxlIGxkOwp0eXBlZGVmIHBhaXI8aW50LGludD4gcGk7CnR5cGVkZWYgdmVjdG9yPGludD4gdmk7CnR5cGVkZWYgdmVjdG9yPHBpPiB2aWk7CiAKY29uc3QgaW50IE1PRCA9IChpbnQpIDFlOSs3Owpjb25zdCBpbnQgSU5GID0gKGludCkgMWU5KzE7CmlubGluZSBsbCBnY2QobGwgYSxsbCBiKXtsbCByO3doaWxlKGIpe3I9YSViO2E9YjtiPXI7fXJldHVybiBhO30KaW5saW5lIGxsIGxjbShsbCBhLGxsIGIpe3JldHVybiBhL2djZChhLGIpKmI7fQoKYm9vbCBjbXAocGkgYSwgcGkgYil7CiAgICByZXR1cm4gYS5zZSA8IGIuc2U7Cn0KCmludCBudW0oY2hhciBjKXsKICAgIHJldHVybiBjIC0gJzAnOwp9Cgp2b2lkIFRDKCl7CiAgICBzdHJpbmcgczsgY2luID4+IHM7CiAgICBpbnQgbGVuID0gcy5sZW5ndGgoKTsKICAgIGludCBkcFtsZW4rMV1bM107CiAgICBpbnQgcHJlW2xlbisxXTsKICAgIG1zKGRwLCAwKTsKICAgIG1zKHByZSwgMCk7CiAgICBpbnQgc3VtID0gMDsKICAgIGRwWzBdWzBdID0gMTsKICAgIGZvcihpbnQgaSA9IDE7IGkgPD0gbGVuOyBpKyspewogICAgICAgIHN1bSArPSBzW2ktMV0tJzAnOwogICAgICAgIHN1bSAlPSAzOwogICAgICAgIHByZVtpXSA9IHN1bTsKICAgICAgICBkcFtpXVtzdW1dICs9IDE7CiAgICAgICAgZHBbaV1bMF0gKz0gZHBbaS0xXVswXTsKICAgICAgICBkcFtpXVsxXSArPSBkcFtpLTFdWzFdOwogICAgICAgIGRwW2ldWzJdICs9IGRwW2ktMV1bMl07CiAgICB9CiAgICBpbnQgYW5zID0gMDsKICAgIGZvcihpbnQgaSA9IDE7IGkgPD0gbGVuOyBpKyspewogICAgICAgIGludCBudW0gPSBzW2ktMV0gLSAnMCc7CiAgICAgICAgaWYobnVtID09IDgpICsrYW5zOwogICAgICAgIGlmKGkgPj0yICl7CiAgICAgICAgICAgIGludCB0bXAgPSAoc1tpLTJdIC0gJzAnKSAqIDEwICsgKHNbaS0xXSAtJzAnKTsKICAgICAgICAgICAgaWYodG1wICUgOCA9PSAwICYmIHRtcCAlIDMgIT0gMCl7CiAgICAgICAgICAgICAgICArK2FuczsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZihpID49IDMpewogICAgICAgICAgICBpbnQgdG1wID0gKHNbaS0zXSAtICcwJykgKiAxMDAgKyhzW2ktMl0gLSAnMCcpICogMTAgKyBzW2ktMV0gLSAnMCc7CiAgICAgICAgICAgIGlmKHRtcCAlIDggPT0gMCl7CiAgICAgICAgICAgICAgICBhbnMgKz0gaSAtIDI7CiAgICAgICAgICAgICAgICBhbnMgLT0gZHBbaS0zXVtwcmVbaV1dOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgY291dCA8PCBhbnMgPDwgZW5kbDsKfQogCmludCBtYWluKCl7CiAgICAvL2ZyZW9wZW4oImlucHV0LnR4dCIsInIiLCBzdGRpbik7CiAgICAvL2ZyZW9wZW4oIm91dHB1dC50eHQiLCJ3IixzdGRvdXQpOwogICAgaW9zOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpOwogICAgY2luLnRpZShudWxscHRyKTsKICAgIGludCB0OyBjaW4gPj4gdDsKICAgIHdoaWxlKHQtLSl7CiAgICAgICAgVEMoKTsKICAgIH0KfQ==