It is Borya's eleventh birthday, and he has got a great present: n cards with numbers. The i-th card has the number a_{i} written on it. Borya wants to put his cards in a row to get one greater number. For example, if Borya has cards with numbers 1, 31, and 12, and he puts them in a row in this order, he would get a number 13112.

He is only 11, but he already knows that there are n! ways to put his cards in a row. But today is a special day, so he is only interested in such ways that the resulting big number is divisible by eleven. So, the way from the previous paragraph is good, because 13112 = 1192 × 11, but if he puts the cards in the following order: 31, 1, 12, he would get a number 31112, it is not divisible by 11, so this way is not good for Borya. Help Borya to find out how many good ways to put the cards are there.

Borya considers all cards different, even if some of them contain the same number. For example, if Borya has two cards with 1 on it, there are two good ways.

Help Borya, find the number of good ways to put the cards. This number can be large, so output it modulo 998244353.


-----Input-----

Input data contains multiple test cases. The first line of the input data contains an integer t — the number of test cases (1 ≤ t ≤ 100). The descriptions of test cases follow.

Each test is described by two lines.

The first line contains an integer n (1 ≤ n ≤ 2000) — the number of cards in Borya's present.

The second line contains n integers a_{i} (1 ≤ a_{i} ≤ 10^9) — numbers written on the cards.

It is guaranteed that the total number of cards in all tests of one input data doesn't exceed 2000.


-----Output-----

For each test case output one line: the number of ways to put the cards to the table so that the resulting big number was divisible by 11, print the number modulo 998244353.


-----Example-----
Input
4
2
1 1
3
1 31 12
3
12345 67 84
9
1 2 3 4 5 6 7 8 9

Output
2
2
2
31680

Difficulty: competition

Starter code:

Solutions:
mod = 998244353
f0 = [ [0 for i in range(11)] for j in range(2010) ]
f1 = [ [0 for i in range(11)] for j in range(2010) ]
fac = [0 for i in range(2010)]
tab = [0 for i in range(11)]
C = [ [0 for i in range(2010)] for j in range(2010) ]

def Init() :
    fac[0] = 1
    for i in range(2010) :
        if i > 0 : fac[i] = fac[i - 1] * i % mod
        C[i][0] = 1
        for j in range(1, 2010) :
            C[i][j] = (C[i - 1][j - 1] + C[i - 1][j]) % mod

def len(x) :
    res = 0
    while x > 0 :
        res += 1
        x = x // 10
    return res
            
def solve() :
    n = int(input())
    f0[0][0] = f1[0][0] = 1
    a = list(map(int, input().split()))
    c0, c1 = 0, 0
    s0, s1 = 0, 0
    for nu in a :
        m = nu % 11
        if len(nu) & 1 :
            c1 += 1
            s1 += m
            for i in range(11) :
                f1[c1][i] = 0
            for i in range(c1 - 1, -1, -1) :
                for j in range(11) :
                    if f1[i][j] == 0 : continue
                    f1[i + 1][(j + m) % 11] += f1[i][j]
                    f1[i + 1][(j + m) % 11] %= mod
        else :
            c0 += 1
            s0 += m
            for i in range(11) :
                f0[c0][i] = 0
            for i in range(c0 - 1, -1, -1) :
                for j in range(11) :
                    if f0[i][j] == 0 : continue
                    f0[i + 1][(j + m) % 11] += f0[i][j]
                    f0[i + 1][(j + m) % 11] %= mod
    s1 %= 11
    s0 %= 11
    part = c1 // 2
    for i in range(11) :
        tab[i] = 0
    for i in range(11) :
        tab[(i + i + 11 - s1) % 11] = f1[c1 - part][i]
    for i in range(11) :
        tab[i] = tab[i] * fac[part] % mod * fac[c1 - part] % mod

    ans = 0
    if c1 == 0 :
        ans = f0[c0][0] * fac[c0]
    elif c0 == 0 :
        ans = tab[0]
    else :
        for i in range(c0 + 1) :
            for j in range(11) :
                if f0[i][j] == 0 : continue
                # print(f0[i][j], tab[(j + j + 11 - s0) % 11] \
                # , fac[i] % mod * fac[c0 - i] % mod, C[j + (c1 - part) - 1][(c1 - part) - 1] % mod * C[part + c0 - i][part] % mod )
                ans = ( ans \
                        + fac[i] % mod * fac[c0 - i] % mod \
                        * f0[i][j] * tab[(j + j + 11 - s0) % 11] % mod \
                        * C[i + (c1 - part) - 1][(c1 - part) - 1] % mod \
                        * C[part + c0 - i][part]
 ) % mod
    print(ans)

Init()
T = int(input())
for ttt in range(T) : solve()