# Original solution
def op1 (p) :
    q = [i for i in p]
    q[12] = p[17]
    q[17] = p[12]
    q[6] = p[21]
    q[7] = p[22]
    q[8] = p[23]
    q[21] = p[6]
    q[22] = p[7]
    q[23] = p[8]
    q[9] = p[11]
    q[11] = p[9]
    return q

def op2 (p) :
    q = [i for i in p]
    q[14] = p[15]
    q[15] = p[14]
    q[0] = p[27]
    q[1] = p[28]
    q[2] = p[29]
    q[27] = p[0]
    q[28] = p[1]
    q[29] = p[2]
    q[18] = p[20]
    q[20] = p[18]
    return q

def op3 (p) :
    q = [i for i in p]
    q[9] = p[20]
    q[20] = p[9]
    q[0] = p[23]
    q[3] = p[26]
    q[6] = p[29]
    q[23] = p[0]
    q[26] = p[3]
    q[29] = p[6]
    q[15] = p[17]
    q[17] = p[15]

    return q

def op4 (p) :
    q = [i for i in p]
    q[11] = p[18]
    q[18] = p[11]
    q[2] = p[21]
    q[5] = p[24]
    q[8] = p[27]
    q[21] = p[2]
    q[24] = p[5]
    q[27] = p[8]
    q[14] = p[12]
    q[12] = p[14]

    return q

def valid (p) :
    for i in range(1, 9) :
        if (p[0] != p[i]) :
            return False

    for i in range(10, 12) :
        if (p[9] != p[i]) :
            return False

    for i in range(13, 15) :
        if (p[12] != p[i]) :
            return False

    for i in range(16, 18) :
        if (p[15] != p[i]) :
            return False

    for i in range(19, 21) :
        if (p[18] != p[i]) :
            return False

    for i in range(22, 30) :
        if (p[21] != p[i]) :
            return False
    return True

def solve (n, p) :

    if (n > 8) :
        return 100

    if (valid(p)) :
        return 0 

    s = [solve(n + 1, op1(p)), solve(n + 1, op2(p)), solve(n + 1, op3(p)), solve(n + 1, op4(p))]
    s.sort()
    return s[0] + 1
    

N = int(eval(input()))
for i in range(0, N) :
    p = [int(term) - 1 for term in input().split()]
    print((solve(0, p)))

# Optimized solution
def op1 (p) :
    return (
        p[ 0],p[ 1],p[ 2],p[ 3],p[ 4],p[ 5],p[21],p[22],p[23],p[11],p[10],p[9],p[17],p[13],p[14],
        p[15],p[16],p[12],p[18],p[19],p[20],p[ 6],p[ 7],p[ 8],p[24],p[25],p[26],p[27],p[28],p[29]
    )
def op2 (p) :
    return (
        p[27],p[28],p[29],p[ 3],p[ 4],p[ 5],p[ 6],p[ 7],p[ 8],p[ 9],p[10],p[11],p[12],p[13],p[15],
        p[14],p[16],p[17],p[20],p[19],p[18],p[21],p[22],p[23],p[24],p[25],p[26],p[ 0],p[ 1],p [2]
    )
    q = [i for i in p]
    q[14] = p[15]
    q[15] = p[14]
    q[0] = p[27]
    q[1] = p[28]
    q[2] = p[29]
    q[27] = p[0]
    q[28] = p[1]
    q[29] = p[2]
    q[18] = p[20]
    q[20] = p[18]
    return q

def op3 (p) :
    return (
        p[23],p[ 1],p[ 2],p[26],p[ 4],p[ 5],p[29],p[ 7],p[ 8],p[20],p[10],p[11],p[12],p[13],p[14],
        p[15],p[16],p[17],p[18],p[19],p[ 9],p[21],p[22],p[ 0],p[24],p[25],p[ 3],p[27],p[28],p[ 6]
    )

def op4 (p) :
    return (
        p[ 0],p[ 1],p[21],p[ 3],p[ 4],p[24],p[ 6],p[ 7],p[27],p[ 9],p[10],p[18],p[14],p[13],p[12],
        p[15],p[16],p[17],p[11],p[19],p[20],p[ 2],p[22],p[23],p[ 5],p[25],p[26],p[ 8],p[28],p[29]
    )

def valid (p) :
    for i in range(1, 9) :
        if (p[0] != p[i]) :
            return False

    for i in range(10, 12) :
        if (p[9] != p[i]) :
            return False

    for i in range(13, 15) :
        if (p[12] != p[i]) :
            return False

    for i in range(16, 18) :
        if (p[15] != p[i]) :
            return False

    for i in range(19, 21) :
        if (p[18] != p[i]) :
            return False

    for i in range(22, 30) :
        if (p[21] != p[i]) :
            return False
    return True

def solve (n, p) :

    if (n > 8) :
        return 100

    if (valid(p)) :
        return 0 

    s = [solve(n + 1, op1(p)), solve(n + 1, op2(p)), solve(n + 1, op3(p)), solve(n + 1, op4(p))]
    s.sort()
    return s[0] + 1
    

N = int(eval(input()))
for i in range(0, N) :
    p = tuple([int(term) - 1 for term in input().split()])
    print((solve(0, p)))