#include<bits/stdc++.h> using namespace std; typedef long long ll; typedef pair<ll, ll>PII; const int N = 2e5 + 10; const int MOD = 998244353; const int INF = 0X3F3F3F3F; const int dx[] = {-1, 1, 0, 0, -1, -1, +1, +1}; const int dy[] = {0, 0, -1, 1, -1, +1, -1, +1}; const int M = 1e6 + 10; int main() { int t; cin >> t; while (t --) { string s; cin >> s; //根据数据范围可知用o(n^2) int n = s.size(); s = ' ' + s; ll sum = 0; int c0 = 0, c1 = 0, c2 = 0, c3 = 0; for (int i = 1; i <= n; i ++) { sum += (int)(s[i] - '0'); int o = s[i] - '0'; if (o == 0) c0 ++; if (o % 3 == 1) c1 ++; if (o % 3 == 2) c2 ++; if (o % 3 == 0 && o != 0) c3 ++; } if (sum % 3 == 0) { //如果是3的倍数首先去0 if (c1 || c2) cout << c3 + c0 << endl; //确保大于0 else cout << c0 + c3 - 1 << endl; } else { //先去掉一个//换成三的倍数去掉前导0之后在按照上述规律 if (sum % 3 == 1) { if (c1) { int ss = 0;//记录和 int f = 0;//标记一下 for (int i = n; i >= 1; i --) { //从后往前,避免前导0 int o = s[i] - '0'; if (o % 3 == 1) { f = i; break; } }//记录是不是首位 c1 --; if (f == 1) { for (int i = 2; i <= n; i ++) { if (s[i] == '0') c0 --; else break; } if (c1 || c2) cout << c3 + c0 + 1 << endl; else cout << c0 + c3 << endl; } else { if (c1 || c2) cout << c3 + c0 + 1 << endl; else cout << c0 + c3 << endl; } } else cout << 0 << endl; } if (sum % 3 == 2) { if (c2) { int ss = 0;//记录和 int f = 0;//标记一下 for (int i = n; i >= 1; i --) { //从后往前,避免前导0 int o = s[i] - '0'; if (o % 3 == 2) { f = i; break; } }//记录是不是首位 c2 --; if (f == 1) { for (int i = 2; i <= n; i ++) { if (s[i] == '0') c0 --; else break; } if (c1 || c2) cout << c3 + c0 + 1 << endl; else cout << c0 + c3 << endl; } else { if (c1 || c2) cout << c3 + c0 + 1 << endl; else cout << c0 + c3 << endl; } } else cout << 0 << endl; } } } return 0; }