Problema para Gerar Sucessores(ArrayList)

Assim eu tenho um código em q eu tenho uma matriz 3x3 e tenho q gerar um arraylist todos os possíveis sucessores dela. Exemplificando:

Com a Matriz:
2 0 1
2 0 0
1 0 2
Eu deveria Gerar todos os possíveis sucessores com o Número 2 ou seja:
2 2 1 2 0 1 2 0 1 2 0 1
2 0 0 2 2 0 2 0 2 2 0 0
1 0 2 1 0 2 1 0 2 1 2 2

Dai eu criei o seguinte código:

public class Main {

public static void main(String[] args) {
   
   int Matriz[][]= new int[3][3];
    Matriz[0][0]=2; Matriz[0][1]=0; Matriz[0][2]=1;
    Matriz[1][0]=2; Matriz[1][1]=0; Matriz[1][2]=0;
    Matriz[2][0]=1; Matriz[2][1]=0; Matriz[2][2]=2;
   Opcoes(Matriz, 2);

}

public void Opcoes(int Mat[][],int k){

 ArrayList Opcoes = new ArrayList();     
   for(int i=0;i<3;i++){
   for(int j=0;j<3;j++){
       if(Mat[i][j]==0){
            int[][] Matriz = new int[3][3];
            Matriz=Mat;
            Matriz[i][j]=k;
            Tabuleiro X1= new Tabuleiro();
            X1.setTab(Matriz);
            Opcoes.add(X1);      
            Matriz=null;
       }    
                          
   }}
    
}

public class Tabuleiro {
private int Tab[][]=new int[3][3];
public int[][] getTab() {
return Tab;
}

public void setTab(int[][] Tab) {
    this.Tab = Tab;
}
   
public void EscreveMatriz(){
     System.out.println(Tab[0][0] + " " + Tab[0][1] + " " + Tab[0][2] + "\n" 
              + Tab[1][0] + " " + Tab[1][1] + " " + Tab[1][2] + "\n"
               + Tab[2][0] + " " + Tab[2][1] + " " + Tab[2][2] + "\n");
}   

}

O problema é quando eu mando o array escrever todos os tabuleiros…todos ficam assim:
2 2 1
2 2 2
1 2 2

Eu ja tentei todas as variações possíveis, com vetor e sempre da o mesmo problema…Alguém pode me ajudar?