import java.nio.file.*;
import java.util.*;

public class Euler96 {
    static int[][] grid;
    static List<int[]> empty;

    static boolean isValid(int r, int c, int num) {
        for (int i = 0; i < 9; i++)
            if (grid[r][i] == num || grid[i][c] == num)
                return false;
        int br = 3 * (r / 3), bc = 3 * (c / 3);
        for (int i = br; i < br + 3; i++)
            for (int j = bc; j < bc + 3; j++)
                if (grid[i][j] == num)
                    return false;
        return true;
    }

    static boolean solve(int idx) {
        if (idx == empty.size())
            return true;
        int r = empty.get(idx)[0], c = empty.get(idx)[1];
        for (int n = 1; n <= 9; n++) {
            if (isValid(r, c, n)) {
                grid[r][c] = n;
                if (solve(idx + 1))
                    return true;
                grid[r][c] = 0;
            }
        }
        return false;
    }

    public static void main(String[] args) throws Exception {
        List<String> lines = Files.readAllLines(Path.of("resources/documents/0096_sudoku.txt"));
        int total = 0;
        for (int p = 0; p < 50; p++) {
            grid = new int[9][9];
            empty = new ArrayList<>();
            for (int r = 0; r < 9; r++) {
                String s = lines.get(p * 10 + 1 + r);
                for (int c = 0; c < 9; c++) {
                    grid[r][c] = s.charAt(c) - '0';
                    if (grid[r][c] == 0)
                        empty.add(new int[] { r, c });
                }
            }
            solve(0);
            total += grid[0][0] * 100 + grid[0][1] * 10 + grid[0][2];
        }
        System.out.println(total);
    }
}
