var cubo_rand;

function seq_gira_angoli_su_asse(blocco)
{
   switch(blocco)
   {
      case 0: cubo_rand.cubo_mossa(1,cubo_rand.dimensione-1,1);
              cubo_rand.cubo_mossa(2,0,1);
              cubo_rand.cubo_mossa(1,cubo_rand.dimensione-1,0);
              cubo_rand.cubo_mossa(0,cubo_rand.dimensione-1,0);
              cubo_rand.cubo_mossa(2,0,1);
              cubo_rand.cubo_mossa(0,cubo_rand.dimensione-1,1);
              cubo_rand.cubo_mossa(1,cubo_rand.dimensione-1,1);
              cubo_rand.cubo_mossa(2,0,0);
              cubo_rand.cubo_mossa(1,cubo_rand.dimensione-1,0);
              cubo_rand.cubo_mossa(2,0,0);
              break;
      case cubo_rand.dimensione-1: cubo_rand.cubo_mossa(1,cubo_rand.dimensione-1,0);
                         cubo_rand.cubo_mossa(2,cubo_rand.dimensione-1,1);
                         cubo_rand.cubo_mossa(1,cubo_rand.dimensione-1,1);
                         cubo_rand.cubo_mossa(0,cubo_rand.dimensione-1,1);
                         cubo_rand.cubo_mossa(2,cubo_rand.dimensione-1,1);
                         cubo_rand.cubo_mossa(0,cubo_rand.dimensione-1,0);
                         cubo_rand.cubo_mossa(1,cubo_rand.dimensione-1,0);
                         cubo_rand.cubo_mossa(2,cubo_rand.dimensione-1,0);
                         cubo_rand.cubo_mossa(1,cubo_rand.dimensione-1,1);
                         cubo_rand.cubo_mossa(2,cubo_rand.dimensione-1,0);
   }
}

function seq_inverti_angoli()
{
   cubo_rand.cubo_mossa(0,0,1);
   cubo_rand.cubo_mossa(1,0,1);
   cubo_rand.cubo_mossa(0,0,0);
   cubo_rand.cubo_mossa(1,0,1);
   cubo_rand.cubo_mossa(0,0,1);
   cubo_rand.cubo_mossa(1,0,2);
   cubo_rand.cubo_mossa(0,0,0);
}

function seq_inverti_angolo()
{
   cubo_rand.cubo_mossa(0,0,0);
   cubo_rand.cubo_mossa(1,cubo_rand.dimensione-1,0);
   cubo_rand.cubo_mossa(0,0,1);
   cubo_rand.cubo_mossa(1,cubo_rand.dimensione-1,1);
   cubo_rand.cubo_mossa(0,0,0);
   cubo_rand.cubo_mossa(1,cubo_rand.dimensione-1,0);
   cubo_rand.cubo_mossa(0,0,1);
}

function seq_sposta_spigolo(pezzo,verso)
{
   if(verso==0)
   {
      cubo_rand.cubo_mossa(0,cubo_rand.dimensione-1,0);
      cubo_rand.cubo_mossa(1,cubo_rand.dimensione-1,1);
      cubo_rand.cubo_mossa(0,cubo_rand.dimensione-1,1);
      cubo_rand.cubo_mossa(1,pezzo,1);
      cubo_rand.cubo_mossa(0,cubo_rand.dimensione-1,0);
      cubo_rand.cubo_mossa(1,cubo_rand.dimensione-1,0);
      cubo_rand.cubo_mossa(0,cubo_rand.dimensione-1,1);
   }
   else //verso==1
   {
      cubo_rand.cubo_mossa(0,cubo_rand.dimensione-1,0);
      cubo_rand.cubo_mossa(1,cubo_rand.dimensione-1,1);
      cubo_rand.cubo_mossa(0,cubo_rand.dimensione-1,1);
      cubo_rand.cubo_mossa(1,pezzo,0);
      cubo_rand.cubo_mossa(0,cubo_rand.dimensione-1,0);
      cubo_rand.cubo_mossa(1,cubo_rand.dimensione-1,0);
      cubo_rand.cubo_mossa(0,cubo_rand.dimensione-1,1);
   }
}

function seq_spigolo_corretto_f2(pezzo)
{
   var colore;
   var inv;

   colore=(cubo_rand.matrix_adesivi[1][pezzo][cubo_rand.dimensione-1]==2)?cubo_rand.matrix_adesivi[4][pezzo][0]:cubo_rand.matrix_adesivi[1][pezzo][cubo_rand.dimensione-1];

   switch(colore)
   {
      case 0: cubo_rand.cubo_mossa(1,0,2); break;
      case 5: cubo_rand.cubo_mossa(1,0,0); break;
      case 4: cubo_rand.cubo_mossa(1,0,1);
   }

   if(cubo_rand.matrix_adesivi[1][pezzo][cubo_rand.dimensione-1]==2)
   {
      inv=true;
      pezzo=cubo_rand.dimensione-1-pezzo;
      cubo_rand.cubo_mossa(0,0,2);
      cubo_rand.cubo_mossa(1,pezzo,1);
   }
   else inv=false;

   cubo_rand.cubo_mossa(1,pezzo,0);
   cubo_rand.cubo_mossa(2,cubo_rand.dimensione-1,2);
   cubo_rand.cubo_mossa(1,pezzo,1);
   seq_sposta_spigolo(pezzo,0);
   cubo_rand.cubo_mossa(2,cubo_rand.dimensione-1,2);

   if(inv) cubo_rand.cubo_mossa(0,0,2);

   switch(colore)
   {
      case 0: cubo_rand.cubo_mossa(1,0,2); break;
      case 5: cubo_rand.cubo_mossa(1,0,1); break;
      case 4: cubo_rand.cubo_mossa(1,0,0);
   }
}

function seq_spigolo_corretto_f3(pezzo)
{
   var colore;
   var inv;

   colore=(cubo_rand.matrix_adesivi[1][pezzo][cubo_rand.dimensione-1]==3)?cubo_rand.matrix_adesivi[4][pezzo][0]:cubo_rand.matrix_adesivi[1][pezzo][cubo_rand.dimensione-1];

   switch(colore)
   {
      case 0: cubo_rand.cubo_mossa(1,cubo_rand.dimensione-1,2); break;
      case 5: cubo_rand.cubo_mossa(1,cubo_rand.dimensione-1,0); break;
      case 4: cubo_rand.cubo_mossa(1,cubo_rand.dimensione-1,1);
   }

   if(cubo_rand.matrix_adesivi[1][pezzo][cubo_rand.dimensione-1]==3)
   {
      inv=true;
      pezzo=cubo_rand.dimensione-1-pezzo;
      cubo_rand.cubo_mossa(0,0,2);
      cubo_rand.cubo_mossa(1,pezzo,1);
   }
   else inv=false;

   seq_sposta_spigolo(pezzo,0);

   if(inv) cubo_rand.cubo_mossa(0,0,2);

   switch(colore)
   {
      case 0: cubo_rand.cubo_mossa(1,cubo_rand.dimensione-1,2); break;
      case 5: cubo_rand.cubo_mossa(1,cubo_rand.dimensione-1,1); break;
      case 4: cubo_rand.cubo_mossa(1,cubo_rand.dimensione-1,0);
   }
}

function seq_swap_spigoli(pezzo)
{
   cubo_rand.cubo_mossa(2,cubo_rand.dimensione-1,2);
   cubo_rand.cubo_mossa(1,pezzo,1);
   cubo_rand.cubo_mossa(2,cubo_rand.dimensione-1,2);
   cubo_rand.cubo_mossa(1,pezzo,2);
   cubo_rand.cubo_mossa(2,cubo_rand.dimensione-1,2);
   cubo_rand.cubo_mossa(1,pezzo,0);
   cubo_rand.cubo_mossa(2,cubo_rand.dimensione-1,2);
}

function seq_inverti_spigoli_centrali()
{
   cubo_rand.cubo_mossa(0,0,0);
   cubo_rand.cubo_mossa(2,Math.floor(cubo_rand.dimensione/2),1);
   cubo_rand.cubo_mossa(0,0,2);
   cubo_rand.cubo_mossa(2,Math.floor(cubo_rand.dimensione/2),2);
   cubo_rand.cubo_mossa(0,0,0);
   cubo_rand.cubo_mossa(2,cubo_rand.dimensione-1,2);
   cubo_rand.cubo_mossa(0,0,1);
   cubo_rand.cubo_mossa(2,Math.floor(cubo_rand.dimensione/2),2);
   cubo_rand.cubo_mossa(0,0,2);
   cubo_rand.cubo_mossa(2,Math.floor(cubo_rand.dimensione/2),0);
   cubo_rand.cubo_mossa(0,0,1);
   cubo_rand.cubo_mossa(2,cubo_rand.dimensione-1,2);
}

function seq_gira_spigoli_su_asse(pezzo)
{
   cubo_rand.cubo_mossa(2,cubo_rand.dimensione-1,1);
   cubo_rand.cubo_mossa(1,0,2);
   cubo_rand.cubo_mossa(0,cubo_rand.dimensione-1,0);
   cubo_rand.cubo_mossa(1,0,0);
   cubo_rand.cubo_mossa(0,cubo_rand.dimensione-1,1);
   cubo_rand.cubo_mossa(1,pezzo,0);
   cubo_rand.cubo_mossa(0,cubo_rand.dimensione-1,0);
   cubo_rand.cubo_mossa(1,0,1);
   cubo_rand.cubo_mossa(0,cubo_rand.dimensione-1,1);
   cubo_rand.cubo_mossa(1,pezzo,1);
   cubo_rand.cubo_mossa(1,0,2);
   cubo_rand.cubo_mossa(2,cubo_rand.dimensione-1,0);
}

function seq_sposta_centri(pezzo,faccia)
{
   var sequenza=[[0,-1,0],[0,-1,0],[2,cubo_rand.dimensione-1,0],[0,-1,1],[2,cubo_rand.dimensione-1,1],[0,-1,1],[2,cubo_rand.dimensione-1,0],[0,-1,0],[2,cubo_rand.dimensione-1,1],[0,-1,1]];
   cubo_rand.seq=sequenza;
   var asse_f=new Array(2);
   var blocco_f=new Array(2);
   var x=new Array(2);
   var y=new Array(2);
   var k=new Array(12);
   var blocco=new Array(2);
   var lato;

   for(var i=0;i<2;i++)
   {
      switch(faccia[i])
      {
         case 0: asse_f[i]=2; blocco_f[i]=0; break;
         case 1: asse_f[i]=2; blocco_f[i]=cubo_rand.dimensione-1; break;
         case 2: asse_f[i]=1; blocco_f[i]=0; break;
         case 3: asse_f[i]=1; blocco_f[i]=cubo_rand.dimensione-1; break;
         case 5: asse_f[i]=0; blocco_f[i]=cubo_rand.dimensione-1; break;
         case 4: asse_f[i]=0; blocco_f[i]=0;
      }
   }

   switch(faccia[0])
   {
      case 1: x[0]=Math.floor(cubo_rand.dimensione/2); y[0]=Math.floor(cubo_rand.dimensione/2);
              k[0]=cubo_rand.dimensione-1; k[1]=-1; k[2]=0;
              k[3]=0; k[4]=0; k[5]=1;
              k[6]=cubo_rand.dimensione-1; k[7]=0; k[8]=-1;
              k[9]=0; k[10]=1; k[11]=0;
              break;
      case 2: if(faccia[1]==0)
              {
                 x[0]=Math.floor(cubo_rand.dimensione/2); y[0]=Math.floor(cubo_rand.dimensione/2);
                 k[0]=cubo_rand.dimensione-1; k[1]=-1; k[2]=0;
                 k[3]=0; k[4]=0; k[5]=1;
                 k[6]=cubo_rand.dimensione-1; k[7]=0; k[8]=-1;
                 k[9]=cubo_rand.dimensione-1; k[10]=-1; k[11]=0;
                 cubo_rand.sequenza_ruota(10,0,1);
              }
              else
              {
                 x[0]=1; y[0]=1;
                 k[0]=cubo_rand.dimensione-1; k[1]=-1; k[2]=0;
                 k[3]=0; k[4]=0; k[5]=1;
                 k[6]=cubo_rand.dimensione-1; k[7]=0; k[8]=-1;
                 k[9]=0; k[10]=1; k[11]=0;
                 cubo_rand.sequenza_ruota(10,0,1);
                 cubo_rand.sequenza_ruota(10,1,2);
              }
              break;
      case 3: switch(faccia[1])
              {
                 case 0: x[0]=1; y[0]=Math.floor(cubo_rand.dimensione/2);
                         k[0]=cubo_rand.dimensione-1; k[1]=-1; k[2]=0;
                         k[3]=cubo_rand.dimensione-1; k[4]=0; k[5]=-1;
                         k[6]=0; k[7]=0; k[8]=1;
                         k[9]=cubo_rand.dimensione-1; k[10]=-1; k[11]=0;
                         cubo_rand.sequenza_ruota(10,0,1);
                         cubo_rand.sequenza_ruota(10,2,2);
                         break;
                 case 1: x[0]=Math.floor(cubo_rand.dimensione/2); y[0]=1;
                         k[0]=cubo_rand.dimensione-1; k[1]=-1; k[2]=0;
                         k[3]=cubo_rand.dimensione-1; k[4]=0; k[5]=-1;
                         k[6]=0; k[7]=0; k[8]=1;
                         k[9]=0; k[10]=1; k[11]=0;
                         cubo_rand.sequenza_ruota(10,0,0);
                         break;
                 case 5: x[0]=Math.floor(cubo_rand.dimensione/2); y[0]=Math.floor(cubo_rand.dimensione/2);
                         k[0]=0; k[1]=0; k[2]=1;
                         k[3]=cubo_rand.dimensione-1; k[4]=-1; k[5]=0;
                         k[6]=0; k[7]=1; k[8]=0;
                         k[9]=0; k[10]=0; k[11]=1;
                         cubo_rand.sequenza_ruota(10,0,0);
                         cubo_rand.sequenza_ruota(10,1,1);
                         break;
                 case 4: x[0]=1; y[0]=1;
                         k[0]=0; k[1]=0; k[2]=1;
                         k[3]=cubo_rand.dimensione-1; k[4]=-1; k[5]=0;
                         k[6]=0; k[7]=1; k[8]=0;
                         k[9]=cubo_rand.dimensione-1; k[10]=0; k[11]=-1;
                         cubo_rand.sequenza_ruota(10,1,0);
                         cubo_rand.sequenza_ruota(10,2,1);
              }
              break;
      case 5: switch(faccia[1])
              {
                 case 0: x[0]=1; y[0]=1;
                         k[0]=0; k[1]=0; k[2]=1;
                         k[3]=cubo_rand.dimensione-1; k[4]=-1; k[5]=0;
                         k[6]=0; k[7]=0; k[8]=1;
                         k[9]=cubo_rand.dimensione-1; k[10]=-1; k[11]=0;
                         cubo_rand.sequenza_ruota(10,0,1);
                         cubo_rand.sequenza_ruota(10,2,0);
                         break;
                 case 1: x[0]=Math.floor(cubo_rand.dimensione/2); y[0]=Math.floor(cubo_rand.dimensione/2);
                         k[0]=0; k[1]=0; k[2]=1;
                         k[3]=cubo_rand.dimensione-1; k[4]=-1; k[5]=0;
                         k[6]=cubo_rand.dimensione-1; k[7]=0; k[8]=-1;
                         k[9]=cubo_rand.dimensione-1; k[10]=-1; k[11]=0;
                         cubo_rand.sequenza_ruota(10,0,0);
                         cubo_rand.sequenza_ruota(10,2,1);
                         break;
                 case 2: x[0]=1; y[0]=Math.floor(cubo_rand.dimensione/2);
                         k[0]=cubo_rand.dimensione-1; k[1]=-1; k[2]=0;
                         k[3]=cubo_rand.dimensione-1; k[4]=0; k[5]=-1;
                         k[6]=0; k[7]=1; k[8]=0;
                         k[9]=cubo_rand.dimensione-1; k[10]=0; k[11]=-1;
                         cubo_rand.sequenza_ruota(10,1,1);
              }
              break;
      case 4: switch(faccia[1])
              {
                 case 0: x[0]=1; y[0]=Math.floor(cubo_rand.dimensione/2);
                         k[0]=0; k[1]=0; k[2]=1;
                         k[3]=0; k[4]=1; k[5]=0;
                         k[6]=0; k[7]=0; k[8]=1;
                         k[9]=0; k[10]=1; k[11]=0;
                         cubo_rand.sequenza_ruota(10,0,1);
                         cubo_rand.sequenza_ruota(10,2,1);
                         break;
                 case 1: x[0]=Math.floor(cubo_rand.dimensione/2); y[0]=1;
                         k[0]=0; k[1]=0; k[2]=1;
                         k[3]=0; k[4]=1; k[5]=0;
                         k[6]=cubo_rand.dimensione-1; k[7]=0; k[8]=-1;
                         k[9]=0; k[10]=1; k[11]=0;
                         cubo_rand.sequenza_ruota(10,0,0);
                         cubo_rand.sequenza_ruota(10,2,0);
                         break;
                 case 2: x[0]=Math.floor(cubo_rand.dimensione/2); y[0]=Math.floor(cubo_rand.dimensione/2);
                         k[0]=cubo_rand.dimensione-1; k[1]=-1; k[2]=0;
                         k[3]=0; k[4]=0; k[5]=1;
                         k[6]=0; k[7]=1; k[8]=0;
                         k[9]=0; k[10]=0; k[11]=1;
                         cubo_rand.sequenza_ruota(10,1,0);
                         break;
                 case 3: x[0]=1; y[0]=1;
                         k[0]=cubo_rand.dimensione-1; k[1]=-1; k[2]=0;
                         k[3]=0; k[4]=0; k[5]=1;
                         k[6]=cubo_rand.dimensione-1; k[7]=-1; k[8]=0;
                         k[9]=0; k[10]=0; k[11]=1;
                         cubo_rand.sequenza_ruota(10,2,2);
                         cubo_rand.sequenza_ruota(10,1,0);
              }
   }

   lato=(cubo_rand.dimensione%2==1)?(Math.floor(cubo_rand.dimensione/2)):(Math.floor(cubo_rand.dimensione/2)-1);
   for(var g=0;g<8;g++)
   {
      for(var a=0;a<lato;a++)
      {
         for(var b=0;b<lato;b++)
         {
            if(!(cubo_rand.dimensione%2==1 && y[0]+a==Math.floor(cubo_rand.dimensione/2) && x[0]+b==Math.floor(cubo_rand.dimensione/2)))
            {
               if(cubo_rand.matrix_adesivi[faccia[0]][y[0]+a][x[0]+b]==pezzo)
               {
                  blocco[0]=k[0]+k[1]*(x[0]+b)+k[2]*(y[0]+a);
                  blocco[1]=k[3]+k[4]*(x[0]+b)+k[5]*(y[0]+a);
                  x[1]=k[6]+k[7]*(x[0]+b)+k[8]*(y[0]+a);
                  y[1]=k[9]+k[10]*(x[0]+b)+k[11]*(y[0]+a);

                  cubo_rand.seq[0][1]=blocco[0];
                  cubo_rand.seq[1][1]=blocco[1];
                  cubo_rand.seq[3][1]=blocco[0];
                  cubo_rand.seq[5][1]=blocco[1];
                  cubo_rand.seq[7][1]=blocco[0];
                  cubo_rand.seq[9][1]=blocco[0];

                  for(var gg=0;gg<4;gg++)
                  {
                     if(cubo_rand.matrix_adesivi[faccia[1]][y[1]][x[1]]!=pezzo)
                     {
                        for(var i=0;i<10;i++) cubo_rand.cubo_mossa(cubo_rand.seq[i][0],cubo_rand.seq[i][1],cubo_rand.seq[i][2]);

                        switch(gg)
                        {
                           case 1: cubo_rand.cubo_mossa(asse_f[1],blocco_f[1],1); break;
                           case 2: cubo_rand.cubo_mossa(asse_f[1],blocco_f[1],2); break;
                           case 3: cubo_rand.cubo_mossa(asse_f[1],blocco_f[1],0);
                        }

                        break;
                     }
                     cubo_rand.cubo_mossa(asse_f[1],blocco_f[1],0);
                  }
               }
            }
         }
      }
      cubo_rand.cubo_mossa(asse_f[0],blocco_f[0],0);
   }
}

function seq_swap_centri()
{
   cubo_rand.cubo_mossa(0,Math.floor(cubo_rand.dimensione/2),1);
   cubo_rand.cubo_mossa(1,Math.floor(cubo_rand.dimensione/2),1);
   cubo_rand.cubo_mossa(0,Math.floor(cubo_rand.dimensione/2),1);
   cubo_rand.cubo_mossa(2,Math.floor(cubo_rand.dimensione/2),1);
   cubo_rand.cubo_mossa(1,Math.floor(cubo_rand.dimensione/2),1);
   cubo_rand.cubo_mossa(2,Math.floor(cubo_rand.dimensione/2),1);

   cubo_rand.cubo_mossa(1,Math.floor(cubo_rand.dimensione/2),1);
   cubo_rand.cubo_mossa(0,Math.floor(cubo_rand.dimensione/2),1);
   cubo_rand.cubo_mossa(1,Math.floor(cubo_rand.dimensione/2),1);
   cubo_rand.cubo_mossa(2,Math.floor(cubo_rand.dimensione/2),1);
   cubo_rand.cubo_mossa(0,Math.floor(cubo_rand.dimensione/2),1);
   cubo_rand.cubo_mossa(2,Math.floor(cubo_rand.dimensione/2),1);
}

function vett_conta(vett,quale)
{
   var conta=0;

   for(var i=0;i<4;i++)
   {
      if(vett[i]==i)
      {
         if(conta<2) quale[conta]=i;
         conta++;
      }
   }
   return conta;
}

function vett_ruota(vett,tipo)
{
   var swap;

   switch(tipo)
   {
      case 1: swap=vett[3];
              vett[3]=vett[2];
              vett[2]=vett[1];
              vett[1]=vett[0];
              vett[0]=swap;
              break;
      case 2: swap=vett[3];
              vett[3]=vett[1];
              vett[1]=swap;
              swap=vett[2];
              vett[2]=vett[0];
              vett[0]=swap;
              break;
      case 0: swap=vett[3];
              vett[3]=vett[0];
              vett[0]=vett[1];
              vett[1]=vett[2];
              vett[2]=swap;
   }
}

function vett_ruota_fisso(vett)
{
   var swap;

   swap=vett[0];
   vett[0]=vett[3];
   vett[3]=vett[1];
   vett[1]=swap;
}

function fase_angoli_tappa_1()
{
   var trovato=true;
   var giusti=0;

   while(trovato)
   {
      trovato=false;
      for(var g=0;g<4;g++)
      {
         if(cubo_rand.matrix_adesivi[1][0][cubo_rand.dimensione-1]==0 || cubo_rand.matrix_adesivi[2][cubo_rand.dimensione-1][cubo_rand.dimensione-1]==0 || cubo_rand.matrix_adesivi[4][0][0]==0)
         {
            trovato=true;

            switch(giusti)
            {
               case 3: cubo_rand.cubo_mossa(0,0,1); break;
               default: cubo_rand.cubo_mossa(0,0,2);
                        cubo_rand.cubo_mossa(2,0,1);
            }
            giusti++;
         }
         cubo_rand.cubo_mossa(2,cubo_rand.dimensione-1,0);
      }
   }
}

function fase_angoli_tappa_2()
{
   var blocco;
   var vett=new Array(4);
   var conta;
   var quale=new Array(2);
   var fisso;
   var risolto;

   for(var i=0;i<2;i++)
   {
      for(var ii=0;ii<4;ii++) vett[ii]=-1;

      blocco=(i==0)?0:(cubo_rand.dimensione-1);

      if(cubo_rand.matrix_adesivi[5][0][cubo_rand.dimensione-1-blocco]==5 || cubo_rand.matrix_adesivi[2][blocco][0]==5 || cubo_rand.matrix_adesivi[i][0][0]==5)
      {
         if(cubo_rand.matrix_adesivi[5][0][cubo_rand.dimensione-1-blocco]==2 || cubo_rand.matrix_adesivi[2][blocco][0]==2 || cubo_rand.matrix_adesivi[i][0][0]=='0' + 2) vett[0]=0;
         else vett[0]=3;
      }
      if(cubo_rand.matrix_adesivi[5][0][cubo_rand.dimensione-1-blocco]==4 || cubo_rand.matrix_adesivi[2][blocco][0]==4 || cubo_rand.matrix_adesivi[i][0][0]==4)
      {
         if(cubo_rand.matrix_adesivi[5][0][cubo_rand.dimensione-1-blocco]==2 || cubo_rand.matrix_adesivi[2][blocco][0]==2 || cubo_rand.matrix_adesivi[i][0][0]==2) vett[0]=1;
         else vett[0]=2;
      }

      if(cubo_rand.matrix_adesivi[4][0][cubo_rand.dimensione-1-blocco]==4 || cubo_rand.matrix_adesivi[2][blocco][cubo_rand.dimensione-1]==4 || cubo_rand.matrix_adesivi[i][0][cubo_rand.dimensione-1]==4)
      {
         if(cubo_rand.matrix_adesivi[4][0][cubo_rand.dimensione-1-blocco]==2 || cubo_rand.matrix_adesivi[2][blocco][cubo_rand.dimensione-1]==2 || cubo_rand.matrix_adesivi[i][0][cubo_rand.dimensione-1]==2) vett[1]=1;
         else vett[1]=2;
      }
      if(cubo_rand.matrix_adesivi[4][0][cubo_rand.dimensione-1-blocco]==5 || cubo_rand.matrix_adesivi[2][blocco][cubo_rand.dimensione-1]==5 || cubo_rand.matrix_adesivi[i][0][cubo_rand.dimensione-1]==5)
      {
         if(cubo_rand.matrix_adesivi[4][0][cubo_rand.dimensione-1-blocco]==2 || cubo_rand.matrix_adesivi[2][blocco][cubo_rand.dimensione-1]==2 || cubo_rand.matrix_adesivi[i][0][cubo_rand.dimensione-1]==2) vett[1]=0;
         else vett[1]=3;
      }

      if(cubo_rand.matrix_adesivi[4][cubo_rand.dimensione-1][cubo_rand.dimensione-1-blocco]==4 || cubo_rand.matrix_adesivi[3][blocco][cubo_rand.dimensione-1]==4 || cubo_rand.matrix_adesivi[i][cubo_rand.dimensione-1][cubo_rand.dimensione-1]==4)
      {
         if(cubo_rand.matrix_adesivi[4][cubo_rand.dimensione-1][cubo_rand.dimensione-1-blocco]==3 || cubo_rand.matrix_adesivi[3][blocco][cubo_rand.dimensione-1]==3 || cubo_rand.matrix_adesivi[i][cubo_rand.dimensione-1][cubo_rand.dimensione-1]==3) vett[2]=2;
         else vett[2]=1;
      }
      if(cubo_rand.matrix_adesivi[4][cubo_rand.dimensione-1][cubo_rand.dimensione-1-blocco]==5 || cubo_rand.matrix_adesivi[3][blocco][cubo_rand.dimensione-1]==5 || cubo_rand.matrix_adesivi[i][cubo_rand.dimensione-1][cubo_rand.dimensione-1]==5)
      {
         if(cubo_rand.matrix_adesivi[4][cubo_rand.dimensione-1][cubo_rand.dimensione-1-blocco]==2 || cubo_rand.matrix_adesivi[3][blocco][cubo_rand.dimensione-1]==2 || cubo_rand.matrix_adesivi[i][cubo_rand.dimensione-1][cubo_rand.dimensione-1]==2) vett[2]=0;
         else vett[2]=3;
      }

      if(cubo_rand.matrix_adesivi[5][cubo_rand.dimensione-1][cubo_rand.dimensione-1-blocco]==5 || cubo_rand.matrix_adesivi[3][blocco][0]==5 || cubo_rand.matrix_adesivi[i][cubo_rand.dimensione-1][0]==5)
      {
         if(cubo_rand.matrix_adesivi[5][cubo_rand.dimensione-1][cubo_rand.dimensione-1-blocco]==3 || cubo_rand.matrix_adesivi[3][blocco][0]==3 || cubo_rand.matrix_adesivi[i][cubo_rand.dimensione-1][0]==3) vett[3]=3;
         else vett[3]=0;
      }
      if(cubo_rand.matrix_adesivi[5][cubo_rand.dimensione-1][cubo_rand.dimensione-1-blocco]==4 || cubo_rand.matrix_adesivi[3][blocco][0]==4 || cubo_rand.matrix_adesivi[i][cubo_rand.dimensione-1][0]==4)
      {
         if(cubo_rand.matrix_adesivi[5][cubo_rand.dimensione-1][cubo_rand.dimensione-1-blocco]==2 || cubo_rand.matrix_adesivi[3][blocco][0]==2 || cubo_rand.matrix_adesivi[i][cubo_rand.dimensione-1][0]==2) vett[3]=1;
         else vett[3]=2;
      }

      risolto=false;
      for(var g=0;g<4 && !risolto;g++)
      {
         conta=vett_conta(vett,quale);

         switch(conta)
         {
            case 4: switch(g)
                    {
                       case 1: cubo_rand.cubo_mossa(2,blocco,1); break;
                       case 2: cubo_rand.cubo_mossa(2,blocco,2); break;
                       case 3: cubo_rand.cubo_mossa(2,blocco,0);
                    }
                    risolto=true;
                    break;
            case 1: fisso=((quale[0]+4-g)%4);
                    switch(g)
                    {
                       case 1: vett_ruota(vett,0); break;
                       case 2: vett_ruota(vett,2); break;
                       case 3: vett_ruota(vett,1);
                    }
                    switch(fisso)
                    {
                       case 0: cubo_rand.cubo_mossa(2,blocco,2);
                               vett_ruota(vett,2);
                               break;
                       case 1: cubo_rand.cubo_mossa(2,blocco,1);
                               vett_ruota(vett,1);
                               break;
                       case 3: cubo_rand.cubo_mossa(2,blocco,0);
                               vett_ruota(vett,0);
                    }
                    do
                    {
                       seq_gira_angoli_su_asse(blocco);
                       vett_ruota_fisso(vett);
                    } while(!(vett[1]-vett[0]==1 || vett[0]-vett[1]==3));
                    switch(vett[0])
                    {
                       case 1: cubo_rand.cubo_mossa(2,blocco,1); break;
                       case 2: cubo_rand.cubo_mossa(2,blocco,2); break;
                       case 3: cubo_rand.cubo_mossa(2,blocco,0);
                    }
                    risolto=true;
                    break;
            case 2: if(!(quale[1]-quale[0]==1 || quale[0]-quale[1]==3))
                    {
                       switch(g)
                       {
                          case 1: vett_ruota(vett,0); break;
                          case 2: vett_ruota(vett,2); break;
                          case 3: vett_ruota(vett,1);
                       }
                       seq_gira_angoli_su_asse(blocco);
                       vett_ruota_fisso(vett);
                       g=-1;
                       break;
                    }
                    else vett_ruota(vett,1);
                    break;
            default: vett_ruota(vett,1);
         }
      }
   }
}

function fase_angoli_tappa_3()
{
   var conta;

   var trovato=true;

   while(trovato)
   {
      trovato=false;
      for(var g=0;g<4;g++)
      {
         if(cubo_rand.matrix_adesivi[2][cubo_rand.dimensione-1][cubo_rand.dimensione-1]!=2)
         {
            trovato=true;

            seq_inverti_angolo();
         }
         cubo_rand.cubo_mossa(1,0,0);
      }
   }

   cubo_rand.cubo_mossa(0,0,2);
   cubo_rand.cubo_mossa(0,cubo_rand.dimensione-1,2);

   do
   {
      conta=0;

      if(cubo_rand.matrix_adesivi[2][0][0]==3) conta++;
      if(cubo_rand.matrix_adesivi[2][0][cubo_rand.dimensione-1]==3) conta++;
      if(cubo_rand.matrix_adesivi[2][cubo_rand.dimensione-1][0]==3) conta++;
      if(cubo_rand.matrix_adesivi[2][cubo_rand.dimensione-1][cubo_rand.dimensione-1]==3) conta++;

      switch(conta)
      {
         case 0: if(cubo_rand.matrix_adesivi[5][0][0]==3) seq_inverti_angoli();
                 else cubo_rand.cubo_mossa(1,0,1);
                 break;
         case 1: if(cubo_rand.matrix_adesivi[2][cubo_rand.dimensione-1][0]==3) seq_inverti_angoli();
                 else cubo_rand.cubo_mossa(1,0,1);
                 break;
         case 2: if(cubo_rand.matrix_adesivi[1][0][0]==3) seq_inverti_angoli();
                 else cubo_rand.cubo_mossa(1,0,1);
      }

   } while(conta!=4);

   cubo_rand.cubo_mossa(0,0,2);
   cubo_rand.cubo_mossa(0,cubo_rand.dimensione-1,2);

   switch(cubo_rand.matrix_adesivi[1][cubo_rand.dimensione-1][cubo_rand.dimensione-1])
   {
      case 0: cubo_rand.cubo_mossa(1,cubo_rand.dimensione-1,2); break;
      case 5: cubo_rand.cubo_mossa(1,cubo_rand.dimensione-1,1); break;
      case 4: cubo_rand.cubo_mossa(1,cubo_rand.dimensione-1,0);
   }
}

function interfase_angoli_spigoli()
{
   var faccia;

   if(cubo_rand.dimensione%2==1)
   {
      for(var i=0;i<6;i++)
      {
         if(cubo_rand.matrix_adesivi[i][Math.floor(cubo_rand.dimensione/2)][Math.floor(cubo_rand.dimensione/2)]==2)
         {
            faccia=i;
         }
      }
   }

   switch(faccia)
   {
      case 0: cubo_rand.cubo_mossa(0,Math.floor(cubo_rand.dimensione/2),0); break;
      case 1: cubo_rand.cubo_mossa(0,Math.floor(cubo_rand.dimensione/2),1); break;
      case 3: cubo_rand.cubo_mossa(0,Math.floor(cubo_rand.dimensione/2),2); break;
      case 5: cubo_rand.cubo_mossa(2,Math.floor(cubo_rand.dimensione/2),1); break;
      case 4: cubo_rand.cubo_mossa(2,Math.floor(cubo_rand.dimensione/2),0); break;
   }
}

function fase_spigoli_tappa_1()
{
   var trovato=true;

   while(trovato)
   {
      trovato=false;
      for(var g=0;g<4;g++)
      {
         for(var i=1;i<cubo_rand.dimensione-1;i++)
         {
            if(cubo_rand.matrix_adesivi[1][cubo_rand.dimensione-1][i]==2 || cubo_rand.matrix_adesivi[3][cubo_rand.dimensione-1][i]==2)
            {
               trovato=true;

               for(var gg=0;gg<4;gg++)
               {
                  if(cubo_rand.matrix_adesivi[1][cubo_rand.dimensione-1-i][cubo_rand.dimensione-1]!=2 && cubo_rand.matrix_adesivi[4][cubo_rand.dimensione-1-i][0]!=2)
                  {
                     seq_sposta_spigolo(cubo_rand.dimensione-1-i,1);
                     break;
                  }
                  cubo_rand.cubo_mossa(1,cubo_rand.dimensione-1-i,0);
               }

               seq_spigolo_corretto_f2(cubo_rand.dimensione-1-i);
            }
         }
         cubo_rand.cubo_mossa(1,cubo_rand.dimensione-1,0);
      }
   }
}

function fase_spigoli_tappa_2()
{
   var trovato=true;

   while(trovato)
   {
      trovato=false;
      for(var g=0;g<4;g++)
      {
         for(var i=1;i<cubo_rand.dimensione-1;i++)
         {
            if(cubo_rand.matrix_adesivi[1][i][cubo_rand.dimensione-1]==2 || cubo_rand.matrix_adesivi[4][i][0]==2)
            {
               trovato=true;
               seq_spigolo_corretto_f2(i);
            }
         }
         for(var i=1;i<cubo_rand.dimensione-1;i++)
         {
            cubo_rand.cubo_mossa(1,i,0);
         }
      }
   }
}

function fase_spigoli_tappa_3()
{
   var trovato=true;
   var faccia=1;

   while(trovato)
   {
      trovato=false;
      for(var g=0;g<4;g++)
      {
         for(var i=1;i<cubo_rand.dimensione-1;i++)
         {
            if(!(cubo_rand.matrix_adesivi[1][0][i]==faccia && cubo_rand.matrix_adesivi[2][cubo_rand.dimensione-1][i]==2))
            {
               trovato=true;

               cubo_rand.cubo_mossa(2,cubo_rand.dimensione-1,2);
               seq_sposta_spigolo(i,1);
               cubo_rand.cubo_mossa(2,cubo_rand.dimensione-1,2);

               fase_spigoli_tappa_2();
            }
         }
         cubo_rand.cubo_mossa(1,0,1);
         switch(faccia)
         {
            case 1: faccia=4; break;
            case 4: faccia=0; break;
            case 0: faccia=5; break;
            case 5: faccia=1;
         }
      }
   }
}

function fase_spigoli_tappa_4()
{
   var trovato=true;

   while(trovato)
   {
      trovato=false;
      for(var g=0;g<4;g++)
      {
         for(var i=1;i<cubo_rand.dimensione-1;i++)
         {
            if(cubo_rand.matrix_adesivi[1][i][cubo_rand.dimensione-1]==3 || cubo_rand.matrix_adesivi[4][i][0]==3)
            {
               trovato=true;
               seq_spigolo_corretto_f3(i);
            }
         }
         for(var i=1;i<cubo_rand.dimensione-1;i++)
         {
            cubo_rand.cubo_mossa(1,i,0);
         }
      }
   }
}

function fase_spigoli_tappa_5()
{
   var trovato=true;
   var faccia=1;

   while(trovato)
   {
      trovato=false;
      for(var g=0;g<4;g++)
      {
         for(var i=1;i<cubo_rand.dimensione-1;i++)
         {
            if(!(cubo_rand.matrix_adesivi[1][cubo_rand.dimensione-1][i]==faccia && cubo_rand.matrix_adesivi[3][cubo_rand.dimensione-1][i]==3))
            {
               trovato=true;

               seq_sposta_spigolo(cubo_rand.dimensione-1-i,1);

               fase_spigoli_tappa_4();
            }
         }
         cubo_rand.cubo_mossa(1,cubo_rand.dimensione-1,1);
         switch(faccia)
         {
            case 1: faccia=4; break;
            case 4: faccia=0; break;
            case 0: faccia=5; break;
            case 5: faccia=1;
         }
      }
   }
}

function fase_spigoli_tappa_6()
{
   var trovato=true;
   var limite=(cubo_rand.dimensione%2==0)?(Math.floor(cubo_rand.dimensione/2)):(Math.floor(cubo_rand.dimensione/2)+1);

   while(trovato)
   {
      trovato=false;
      for(var g=0;g<4;g++)
      {
         for(var i=limite;i<cubo_rand.dimensione-1;i++)
         {
            if(cubo_rand.matrix_adesivi[1][i][cubo_rand.dimensione-1]==4 && cubo_rand.matrix_adesivi[4][i][0]==1)
            {
               trovato=true;

               seq_swap_spigoli(i);
            }
            if(cubo_rand.matrix_adesivi[1][i][cubo_rand.dimensione-1]==0 && cubo_rand.matrix_adesivi[4][i][0]==4)
            {
               trovato=true;

               cubo_rand.cubo_mossa(1,cubo_rand.dimensione-1-i,1);
               seq_swap_spigoli(i);
               cubo_rand.cubo_mossa(1,cubo_rand.dimensione-1-i,0);
            }
            if(cubo_rand.matrix_adesivi[1][i][cubo_rand.dimensione-1]==5 && cubo_rand.matrix_adesivi[4][i][0]==0)
            {
               trovato=true;

               cubo_rand.cubo_mossa(1,cubo_rand.dimensione-1-i,2);
               seq_swap_spigoli(i);
               cubo_rand.cubo_mossa(1,cubo_rand.dimensione-1-i,2);
            }
            if(cubo_rand.matrix_adesivi[1][i][cubo_rand.dimensione-1]==1 && cubo_rand.matrix_adesivi[4][i][0]==5)
            {
               trovato=true;

               cubo_rand.cubo_mossa(1,cubo_rand.dimensione-1-i,0);
               seq_swap_spigoli(i);
               cubo_rand.cubo_mossa(1,cubo_rand.dimensione-1-i,1);
            }
         }
         for(var i=limite;i<cubo_rand.dimensione-1;i++)
         {
            cubo_rand.cubo_mossa(1,i,0);
         }
      }
   }
}

function fase_spigoli_tappa_7()
{
   for(var i=1;i<(Math.floor(cubo_rand.dimensione/2));i++)
   {
      if(!(cubo_rand.matrix_adesivi[1][i][cubo_rand.dimensione-1]==1 && cubo_rand.matrix_adesivi[4][i][0]==4))
      {
         seq_swap_spigoli(cubo_rand.dimensione-1-i);
         fase_spigoli_tappa_6();
      }
      if(!(cubo_rand.matrix_adesivi[4][i][cubo_rand.dimensione-1]==4 && cubo_rand.matrix_adesivi[0][i][cubo_rand.dimensione-1]==0))
      {
         cubo_rand.cubo_mossa(1,i,1);
         seq_swap_spigoli(cubo_rand.dimensione-1-i);
         cubo_rand.cubo_mossa(1,i,0);
         fase_spigoli_tappa_6();
      }
      if(!(cubo_rand.matrix_adesivi[0][i][0]==0 && cubo_rand.matrix_adesivi[5][i][cubo_rand.dimensione-1]==5))
      {
         cubo_rand.cubo_mossa(1,i,2);
         seq_swap_spigoli(cubo_rand.dimensione-1-i);
         cubo_rand.cubo_mossa(1,i,2);
         fase_spigoli_tappa_6();
      }
      if(!(cubo_rand.matrix_adesivi[5][i][0]==5 && cubo_rand.matrix_adesivi[1][i][0]==1))
      {
         cubo_rand.cubo_mossa(1,i,0);
         seq_swap_spigoli(cubo_rand.dimensione-1-i);
         cubo_rand.cubo_mossa(1,i,1);
         fase_spigoli_tappa_6();
      }
   }
}

function fase_spigoli_tappa_8()
{
   var vett=new Array(4);
   var conta;
   var quale=new Array(2);
   var fisso;
   var volte;
   var risolto;

   for(var i=(Math.floor(cubo_rand.dimensione/2));i<cubo_rand.dimensione-1;i++)
   {
      if(cubo_rand.dimensione%2==1 && i==Math.floor(cubo_rand.dimensione/2)) volte=2;
      else volte=1;

      for(var t=0;t<volte;t++)
      {
         for(var ii=0;ii<4;ii++) vett[ii]=-1;

         if(cubo_rand.matrix_adesivi[0][i][0]==0 && cubo_rand.matrix_adesivi[5][i][cubo_rand.dimensione-1]==5) vett[0]=0;
         if(cubo_rand.matrix_adesivi[4][i][cubo_rand.dimensione-1]==0 && cubo_rand.matrix_adesivi[0][i][cubo_rand.dimensione-1]==5) vett[1]=0;
         if(cubo_rand.matrix_adesivi[1][i][cubo_rand.dimensione-1]==0 && cubo_rand.matrix_adesivi[4][i][0]==5) vett[2]=0;
         if(cubo_rand.matrix_adesivi[5][i][0]==0 && cubo_rand.matrix_adesivi[1][i][0]==5) vett[3]=0;

         if(cubo_rand.matrix_adesivi[0][i][0]==4 && cubo_rand.matrix_adesivi[5][i][cubo_rand.dimensione-1]==0) vett[0]=1;
         if(cubo_rand.matrix_adesivi[4][i][cubo_rand.dimensione-1]==4 && cubo_rand.matrix_adesivi[0][i][cubo_rand.dimensione-1]==0) vett[1]=1;
         if(cubo_rand.matrix_adesivi[1][i][cubo_rand.dimensione-1]==4 && cubo_rand.matrix_adesivi[4][i][0]==0) vett[2]=1;
         if(cubo_rand.matrix_adesivi[5][i][0]==4 && cubo_rand.matrix_adesivi[1][i][0]==0) vett[3]=1;

         if(cubo_rand.matrix_adesivi[0][i][0]==1 && cubo_rand.matrix_adesivi[5][i][cubo_rand.dimensione-1]==4) vett[0]=2;
         if(cubo_rand.matrix_adesivi[4][i][cubo_rand.dimensione-1]==1 && cubo_rand.matrix_adesivi[0][i][cubo_rand.dimensione-1]==4) vett[1]=2;
         if(cubo_rand.matrix_adesivi[1][i][cubo_rand.dimensione-1]==1 && cubo_rand.matrix_adesivi[4][i][0]==4) vett[2]=2;
         if(cubo_rand.matrix_adesivi[5][i][0]==1 && cubo_rand.matrix_adesivi[1][i][0]==4) vett[3]=2;

         if(cubo_rand.matrix_adesivi[0][i][0]==5 && cubo_rand.matrix_adesivi[5][i][cubo_rand.dimensione-1]==1) vett[0]=3;
         if(cubo_rand.matrix_adesivi[4][i][cubo_rand.dimensione-1]==5 && cubo_rand.matrix_adesivi[0][i][cubo_rand.dimensione-1]==1) vett[1]=3;
         if(cubo_rand.matrix_adesivi[1][i][cubo_rand.dimensione-1]==5 && cubo_rand.matrix_adesivi[4][i][0]==1) vett[2]=3;
         if(cubo_rand.matrix_adesivi[5][i][0]==5 && cubo_rand.matrix_adesivi[1][i][0]==1) vett[3]=3;

         if(cubo_rand.dimensione%2==1 && i==Math.floor(cubo_rand.dimensione/2) && t==0)
         {
            if((vett[0]==-1 && vett[1]==-1 && vett[2]==-1))
            {
               seq_inverti_spigoli_centrali();
               cubo_rand.cubo_mossa(1,Math.floor(cubo_rand.dimensione/2),2);
               seq_inverti_spigoli_centrali();
               cubo_rand.cubo_mossa(1,Math.floor(cubo_rand.dimensione/2),2);
            }

            if((vett[0]==-1 && vett[1]!=-1 && vett[2]==-1))
            {
               seq_inverti_spigoli_centrali();
               cubo_rand.cubo_mossa(1,Math.floor(cubo_rand.dimensione/2),0);
               seq_inverti_spigoli_centrali();
               cubo_rand.cubo_mossa(1,Math.floor(cubo_rand.dimensione/2),1);
            }

            if((vett[1]==-1 && vett[2]!=-1 && vett[3]==-1))
            {
               seq_inverti_spigoli_centrali();
               cubo_rand.cubo_mossa(1,Math.floor(cubo_rand.dimensione/2),1);
               seq_inverti_spigoli_centrali();
               cubo_rand.cubo_mossa(1,Math.floor(cubo_rand.dimensione/2),0);
            }

            if((vett[0]==-1 && vett[1]==-1 && vett[2]!=-1))
            {
               cubo_rand.cubo_mossa(1,Math.floor(cubo_rand.dimensione/2),2);
               seq_inverti_spigoli_centrali();
               cubo_rand.cubo_mossa(1,Math.floor(cubo_rand.dimensione/2),2);
            }

            if((vett[1]==-1 && vett[2]==-1 && vett[3]!=-1))
            {
               cubo_rand.cubo_mossa(1,Math.floor(cubo_rand.dimensione/2),1);
               seq_inverti_spigoli_centrali();
               cubo_rand.cubo_mossa(1,Math.floor(cubo_rand.dimensione/2),0);
            }

            if((vett[2]==-1 && vett[3]==-1 && vett[0]!=-1))
            {
               seq_inverti_spigoli_centrali();
            }

            if((vett[0]==-1 && vett[3]==-1 && vett[1]!=-1))
            {
               cubo_rand.cubo_mossa(1,Math.floor(cubo_rand.dimensione/2),0);
               seq_inverti_spigoli_centrali();
               cubo_rand.cubo_mossa(1,Math.floor(cubo_rand.dimensione/2),1);
            }
         }
      }

      risolto=false;
      for(var g=0;g<4 && !risolto;g++)
      {
         conta=vett_conta(vett,quale);

         switch(conta)
         {
            case 4: switch(g)
                    {
                       case 1: cubo_rand.cubo_mossa(1,i,1); break;
                       case 2: cubo_rand.cubo_mossa(1,i,2); break;
                       case 3: cubo_rand.cubo_mossa(1,i,0);
                    }
                    risolto=true;
                    break;
            case 1: fisso=((quale[0]+4-g)%4);
                    switch(g)
                    {
                       case 1: vett_ruota(vett,0); break;
                       case 2: vett_ruota(vett,2); break;
                       case 3: vett_ruota(vett,1);
                    }
                    switch(fisso)
                    {
                       case 0: cubo_rand.cubo_mossa(1,i,2); 
                               vett_ruota(vett,2); 
                               break;
                       case 1: cubo_rand.cubo_mossa(1,i,1); 
                               vett_ruota(vett,1);
                               break;
                       case 3: cubo_rand.cubo_mossa(1,i,0);
                               vett_ruota(vett,0);
                    }
                    do
                    {
                       seq_gira_spigoli_su_asse(i);
                       vett_ruota_fisso(vett);
                    } while(!(vett[1]-vett[0]==1 || vett[0]-vett[1]==3));
                    switch(vett[0])
                    {
                       case 1: cubo_rand.cubo_mossa(1,i,1); break;
                       case 2: cubo_rand.cubo_mossa(1,i,2); break;
                       case 3: cubo_rand.cubo_mossa(1,i,0);
                    }
                    risolto=true;
                    break;
            case 2: if(!(quale[1]-quale[0]==1 || quale[0]-quale[1]==3))
                    {
                       switch(g)
                       {
                          case 1: vett_ruota(vett,0); break;
                          case 2: vett_ruota(vett,2); break;
                          case 3: vett_ruota(vett,1);
                       }
                       seq_gira_spigoli_su_asse(i);
                       vett_ruota_fisso(vett);
                       g=-1;
                       break;
                    }
                    else vett_ruota(vett,1);
                    break;
            default: vett_ruota(vett,1);
         }
      }
   }
}

function fase_centri_tappa_1()
{
   var pezzo=[0,0,0,0,0,1,1,1,1,2,2,2,5,5,3];
   var facce=[[1,2],[2,0],[3,0],[5,0],[4,0],[2,1],[3,1],[5,1],[4,1],[3,4],[5,2],[4,2],[4,3],[3,5],[4,3]];

   for(var i=0;i<15;i++)
   {
      seq_sposta_centri(pezzo[i],facce[i]);
   }
}

function fase_centri_tappa_2()
{
   if(cubo_rand.dimensione%2==1 && cubo_rand.matrix_adesivi[0][Math.floor(cubo_rand.dimensione/2)][Math.floor(cubo_rand.dimensione/2)]!=0) seq_swap_centri();
}

function risolutore(cubo_rubik)
{
   cubo_rand = cubo_rubik;

   var trovato=false;

   /*Controlla che non sia gia' risolto*/
   for(var f=0;f<6;f++)
   {
      for(var a=0;a<cubo_rand.dimensione;a++)
      {
         for(var b=0;b<cubo_rand.dimensione;b++)
         {
            if(cubo_rand.matrix_adesivi[f][a][b]!=cubo_rand.matrix_adesivi[f][0][0]) trovato=true;
         }
      }
   }
   if(!trovato) return;

   fase_angoli_tappa_1();
   fase_angoli_tappa_2();
   fase_angoli_tappa_3();

   if(cubo_rand.dimensione>2)
   {
      interfase_angoli_spigoli();

      fase_spigoli_tappa_1();
      fase_spigoli_tappa_2();
      fase_spigoli_tappa_3();
      fase_spigoli_tappa_4();
      fase_spigoli_tappa_5();
      fase_spigoli_tappa_6();
      fase_spigoli_tappa_7();
      fase_spigoli_tappa_8();

      if(cubo_rand.dimensione>3) fase_centri_tappa_1();
      fase_centri_tappa_2();
   }
}