def variable(i,j,c):
    return 100*i + 10*j + c 
Range = range(1,10)


array = [ input().strip() for i in Range ]
variables_in_one_clauses = [] 

for i in Range:
    row_string = array[i-1]
    for j in Range:
        character = row_string[j-1]
        if character != 'x':
            c = int(character)
            variables_in_one_clauses.append(variable(i,j,c))
# clauses:

number_of_clauses = len(variables_in_one_clauses) + 81 + 3 * (9 * (9*8//2) * 9)
print(f"p cnf 1000 {number_of_clauses}")

# len(variables_in_one_clauses) many clauses

for v in variables_in_one_clauses:
    print(v, 0)






pairs = []
for j in Range:
    for i in range(1,j):
        pairs.append((i,j))


# constraints that every row has a number: 81 clauses
for i in Range:
    for j in Range:
        # clause begins
        for c in Range:
            print(variable(i,j,c), end=' ')
        print('0')
        # clause ended


# constraints that no row and no column has a duplicate: 9 * (9 choose 2) * 9 * 2 = 5832

for i in Range:
    for (j1, j2) in pairs:
        for c in Range:
            # no row has a duplicate
            print(- variable(i,j1,c), -variable(i,j2,c), 0)

            # no row has a duplicate
            print(- variable(j1,i,c), -variable(j2,i,c), 0)


# constraints that no block has a duplicate: 9 * (9 choose 2) * 9 = 2916

inside_block = [(1,1), (1,2), (1,3), (2,1), (2,2), (2,3), (3,1), (3,2), (3,3)]

for block_row in [0,3,6]:
    for block_column in [0,3,6]:
        for (i1,j1) in inside_block:
            for (i2,j2) in inside_block:
                (x1,y1) = (block_row + i1, block_column + j1)
                (x2,y2) = (block_row + i2, block_column + j2)
                if (x1,y1) < (x2,y2):
                    for c in Range:
                        print(-variable (x1,y1,c), -variable (x2,y2,c), ' ', 0)


