public static void main(String args[]) throws IOException {
        
        File _= new File("input0");
        BufferedReader br = new BufferedReader( _.exists()?new FileReader(_):new InputStreamReader(System.in) );
        StringTokenizer st;
        String line = "";

        // Numero de Tableros
        n = Integer.parseInt(br.readLine());

        for (int casos = 0; casos < n ; casos++) {
            
            Cubo cubo = lectura(br);
            //Descomentar para ver como queda el Cubo
            //System.out.println("***CUBO***"+cubo);
            inicial = new NodeCubo(0, Heuristica.h1(cubo), cubo);
            System.out.println(cubo);
            Giros mano = new Giros();
            //Cubo caux = new Cubo(mano.girar(cubo.getCubo(), 4), cubo.getColors());
            //System.out.println(caux);
            //caux = new Cubo(mano.girar(cubo.getCubo(), 6), cubo.getColors());
            //System.out.println(caux);
            Cubo caux = new Cubo(mano.girar(cubo.getCubo(), 2), cubo.getColors());
            System.out.println(caux);
            /*Q = new PriorityQueue<>();         
            long time_init = System.currentTimeMillis();
            int pasos = search();
            long time_fin = System.currentTimeMillis();
            System.out.println("Caso "+casos+": Pasos-> "+pasos+" Estado inicial-> "+inicial.estado+" Tiempo t-> "+(time_fin-time_init));
            */
        }

    }
 // Busqueda usando A*
 public static int search() {
     HashSet<State> v = new HashSet<>();
     Giros mano = new Giros();
     ArrayList<int[][]>aux;
     
     finall = inicial.createGoalState();
     Q.add(inicial);
     Node actual;
     int cont = 0;
     
     while ( !(actual = Q.remove()).estado.equals(finall.estado) ) {
         
         if(v.contains(actual.estado)) 
             continue;
         System.out.println(actual.estado+" "+actual.costo_hasta_aqui+" "+actual.costo_total);
         System.out.println("->\n"+((NodeCubo)actual).getValue() );
         
         v.add(actual.estado);
         int ca = actual.costo_hasta_aqui + 1;
         
         //Realiza Movimientos
         for( int i=0; i<12; i++ ){
             aux = mano.girar( ((Cubo)actual.getValue()).getCubo(), i);
             Node nuevo = new NodeCubo(ca, ca+Heuristica.h1((Cubo)actual.getValue()), new Cubo( aux, ((Cubo)inicial.getValue()).getColors() ) );
             Q.add( (Node)nuevo );
         }
         cont++;
     }
     return cont;
 }