Problem: 2050C - Uninteresting Number
Language: python

Solution 1 (runtime: 249 ms):
# ======= author: kuanhungchen.com | created: 05/02/23 08:33:06 CST ======= #
from sys            import stdin,  stderr, stdout, setrecursionlimit
from bisect         import bisect_left, bisect_right
from collections    import defaultdict, deque, Counter
from itertools      import accumulate, combinations, permutations, product
from functools      import lru_cache, cmp_to_key, reduce
from heapq          import heapify, heappush, heappop, heappushpop, heapreplace
# from pypyjit        import set_param
# set_param("max_unroll_recursion=-1")
# setrecursionlimit(300005)
orda  = 97
ordA  = 65
INF   = 1 << 60
MOD   = 1000000007
MOD2  = 998244353
input = lambda: stdin.readline().rstrip("\r\n")
linen = lambda cf_: "[L" + str(cf_.f_back.f_lineno) + "] "
dbg   = lambda *A, **M: stderr.write("\033[91m" + \
        M.get("sep", " ").join(map(str, A)) + M.get("end", "\n") + "\033[0m")
# ============================ START OF MY CODE ============================ #

def solve(_tc):
    s = input()
    n = len(s)
    dp = [set() for _ in range(n)]
    x = int(s[0])
    while x <= 9:
        dp[0].add(x % 9)
        if x == 0 or x == 1: break
        x *= x
    for i in range(1, n):
        x = int(s[i])
        xs = []
        while x <= 9:
            xs.append(x)
            if x == 0 or x == 1: break
            x *= x
        st = set()
        for d in dp[i - 1]:
            for x in xs:
                st.add((d + x) % 9)
        dp[i] = st
    if 0 in dp[-1]:
        print("YES")
    else:
        print("NO")


if __name__ == "__main__":
    _tcs = int(input())
    for _tc in range(1, vars().get("_tcs", 1) + 1):
        dbg("=== Case {} ===".format(str(_tc).rjust(2)))
        solve(_tc)


Solution 2 (runtime: 156 ms):
import sys, os, math, random
from _collections_abc import range_iterator
from io import BytesIO, IOBase
import copy
from collections import defaultdict
import random



# sys.setrecursionlimit(10**6)
BUFSIZE = 4096
MOD = 10 ** 9 + 7
MODD = 998244353
inf = float('inf')


class FastIO(IOBase):
    newlines = 0

    def __init__(self, file):
        self._fd = file.fileno()
        self.buffer = BytesIO()
        self.writable = "x" in file.mode or "r" not in file.mode
        self.write = self.buffer.write if self.writable else None

    def read(self):
        while True:
            b = os.read(self._fd, max(os.fstat(self._fd).st_size, BUFSIZE))
            if not b:
                break
            ptr = self.buffer.tell()
            self.buffer.seek(0, 2), self.buffer.write(b), self.buffer.seek(ptr)
        self.newlines = 0
        return self.buffer.read()

    def readline(self):
        while self.newlines == 0:
            b = os.read(self._fd, max(os.fstat(self._fd).st_size, BUFSIZE))
            self.newlines = b.count(b"\n") + (not b)
            ptr = self.buffer.tell()
            self.buffer.seek(0, 2), self.buffer.write(b), self.buffer.seek(ptr)
        self.newlines -= 1
        return self.buffer.readline()

    def flush(self):
        if self.writable:
            os.write(self._fd, self.buffer.getvalue())
            self.buffer.truncate(0), self.buffer.seek(0)


class IOWrapper(IOBase):
    def __init__(self, file):
        self.buffer = FastIO(file)
        self.flush = self.buffer.flush
        self.writable = self.buffer.writable
        self.write = lambda s: self.buffer.write(s.encode("ascii"))
        self.read = lambda: self.buffer.read().decode("ascii")
        self.readline = lambda: self.buffer.readline().decode("ascii")


sys.stdin, sys.stdout = IOWrapper(sys.stdin), IOWrapper(sys.stdout)

input = lambda: sys.stdin.readline().rstrip("\r\n")
i = lambda: input()
ii = lambda: int(input())
MI = lambda: map(str, input().split())
mi = lambda: map(int, input().split())
li = lambda: list(input().split())
lmi = lambda: list(map(int, input().split()))
zli = lambda: [0] + list(map(int, input().split()))


def find_factors(n):
    factors = []
    if n == 1:
        factors.append(1)
    for i in range(1, math.ceil(math.sqrt(n)) + 1):
        if n % i == 0:
            if i * i == n:
                factors.append(i)
            else:

                factors.append(i)
                factors.append(n // i)
    s = set(factors)
    factors = list(s)

    return (factors)





import bisect


def standard_binary_search(array, searchVal):
    return bisect.bisect_left(array, searchVal + 1) - 1







caca=0
tata=False
def solve():
    a=input()
    n=len(a)
    s=0
    twos=0
    threes=0
    lst=[2,4,6,8,1,3,5,7,0]
    for i in range(n):
        s+=int(a[i])
        if a[i]=='2':
            twos+=1

        if a[i]=='3':
            threes+=1


    if s%9==0:
        print('yes')
        return
    num=s%9
    i1=lst.index(num)
    for i in range(min(2,threes)):
        jj=(lst[i1]+6)%9
        
        i1=max(i1,lst.index(jj))
        if i1==8:
            print('yes')
            return
    for i in range(min(10,twos)):
        i1=lst.index((lst[i1]+2)%9)
        if i1==8:
            print('yes')
            return
    print('no')














l = ii()

for i in range(l):




    solve()