#include <array>
#include <iostream>
using namespace std;
int judge(string n) {
//此函数对每个输入进行判断和输出
array<int, 3> mod3 = {0, 0, 0};
//此数组用于存储对3取余数字的个数
int num_cnt = 0;//记录数字总个数
for (char c : n) {
if ((c - '0') % 3 == 1)
mod3[1]++;
else if ((c - '0') % 3 == 2)
mod3[2]++;
else
mod3[0]++;
num_cnt ++;
}
int dif = (mod3[1] + mod3[2]*2) % 3;//此值与n对3取余结果相等
if(dif==0){
if(num_cnt==mod3[0]){//若所有数字都为3的倍数,不可全部删除
cout << mod3[0] - 1 << endl;
}
else{
cout << mod3[0] << endl;
}
}
else{ //dif为1或2
if(mod3[dif]==1 && (n[0]-'0')%3==dif){
//要减去一个数才是3的倍数。若此数仅有一个且在首位,则要删去一部分0
int i = 1;
while(n[i]=='0'){
mod3[0]--;
i++;
}
}
if(mod3[3-dif]==0 && mod3[dif]==1 && num_cnt>1){ // 除了3的倍数外只有3n+1
cout << mod3[0] << endl;//事实上是mod3[0]+1-1,加的1是3n+1,减的1是要剩下来的
}
else if(mod3[dif] > 0){ //mod3[2]>0或mod3[1]>1,总之不需要考虑结果为0的问题
cout << mod3[0] + 1 << endl;
}
else { //变不成3的倍数,输出0
cout << 0 << endl;
}
}
return 0;
}
int main() {
int t, sum = 0;
string n;//n的取值范围很大,且仅需对n中各位数字单独处理,故采取字符串的形式存储n
cin >> t;
for (int i = 0; i < t; i++) {
cin >> n;
judge(n);
}
return 0;
}
// 64 位输出请用 printf("%lld")