public bool GenerateLatinSqure2(ref int RX, int[,] LS)
 {
     if (RX < 0 || LSR == null)
     {
         LSR = new LatSqrRow[9];
         for (int k = 0; k < 9; k++)
         {
             LSR[k] = new LatSqrRow(PatGen, k);
         }
         RX = 0;
         LSR[RX].SetPreInfo(null);
     }
     if (RX == 8)
     {
         while (LSR[RX].nc <= 0)
         {
             RX--;                        //variable portion is one line blank
         }
     }
     do
     {
         int[] P = LSR[RX].Gen_LS_RowX();
         if (P != null)
         {
             for (int c = 0; c < 9; c++)
             {
                 LS[RX, c] = P[c];
             }
             if (RX == 8)
             {
                 return(true);
             }
             LSR[RX + 1].SetPreInfo(LSR[RX++]);
         }
         else
         {
             while (RX > 0 && LSR[--RX].nc <= 0)
             {
                 ;
             }
         }
     }while(RX >= 0);
     return(false);
 }
 public void SetPreInfo(LatSqrRow preLSR)
 {
     this.preLSR = preLSR;
 }