import java.util.ArrayList;
import java.util.Arrays;
import java.util.Scanner;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Scanner;

public class Main {
        static int map[][];
    public static void main(String[] args) {
       
        Scanner sc = new Scanner(System.in);
       
       map = new int[9][9];
     
      for(int i=0;i<9;i++) {
          for(int j=0;j<9;j++) {
             
              map[i][j]=sc.nextInt();
             
           
          }
      }
      sdoku(0,0);
       
    }
   
    static void sdoku(int row,int col) {
        if(col==9) {
            sdoku(row+1,0);
            return;
        }
        if(row==9) {
            for(int i=0;i<9;i++) {
                for(int j=0;j<9;j++) {
                    System.out.print(map[i][j]+" ");
                }
                System.out.println();
            }
           
            System.exit(0);
        }
           
            if(map[row][col]==0 ) {
                for(int i=1;i<=9;i++) {
                    if(possibility(row,col,i)) {
                        map[row][col]=i;
                        sdoku(row,col+1);
                    }
                }
               
                map[row][col]=0; // 기껏 map에 i값을 집어넣어놓고 왜 여기서 0으로 초기화시켜주는거지??
           return; // 이 코드가 의미하는게 뭐지 없어도 되는거 아닌가?? 모르겟음 ㅜㅜㅜ
               
            }
           
           
            sdoku(row,col+1);
        }
   
    static boolean possibility(int row,int col,int value) {
        for(int i=0;i<9;i++) {
            if(map[row][i]==value) {
                return false;
            }
        }
        for(int i=0;i<9;i++) {
            if(map[i][col]==value) {
                return false;
            }
        }
       
        int set_row =(row/3)*3;
        int set_col=(col/3)*3;
       
        for(int i=set_row;i<set_row +3;i++  ) {
            for(int j=set_col;j<set_col+3;j++   ) {
                if(map[i][j]==value) {
                    return false;
                }
            }
        }
       
            return true;
       
    }

}

문제링크:https://www.acmicpc.net/problem/2580