bool flag ;
Array Num;                        
int Number ;                            
int ranNum ; 

main()
begin
int i;
int j;
int time;
  for(i~0; i<9;i++)                  
  begin
      time~0;
      for(j~0;j<9;j++)
      begin
         Grid.Cell(i,j) ~ generateNum(i,j,time);    
         Number ~ Grid.Cell(i,j) ; 
         if (Grid.Cell(i,j) =0)
         begin
             if(j>0)
             begin 
               j ~ j - 2;               
             end 
             else                       
             begin
                i--;
                j ~ 8;
             end
         end
         if (check(i,j))                
         begin
              time ~ 0;                 
         end 
         else
         begin  
               time++;                  
               j--   ;                  
         end 
      end                       
  end
  Grid.CheckGrid();
  Print("Please enter number of blank") ;
  n ~ Scan ();
  for(k ~0 ; k < n; k++)
  begin
     i ~ Random(8);
     j ~ Random(8);
     if (Grid.Cell(i,j)!= 0)
     begin
         Grid.Cell(i,j) ~ 0; 
     end
  end
   
  for(i ~0; i< 9;i++) 
  begin
     for(j~0;j<9;j++) 
     begin 
        if (Grid.Cell(i,j)!=0)
        begin
           Print("a");    
        end
        else
        begin
           Print("[]");
        end
     end
  end 
end

check(int row,int col)
begin
   return checkRow(row) and checkCol(col) and checkBlock(row,col) ; 
end

checkRow (int row)
begin
   int m;
   int n;
   for(m ~0; m < 8;m++)
   begin
     flag ~ true; 
     if(Grid.Cell(row,m) = 0)
     begin  
        flag ~ false;
     end 
     if (flag = true)
     begin 
        for (n ~m+1;n<9;n++)
        begin  
           if ( Grid.Cell(row,m) = Grid.Cell(row,n))
           begin
              return false;
           end
        end
      end
      return true;
    end
end

checkCol (int col) 
begin
    int m;
    int n;
    for(m ~0; m < 8;m++)
    begin
     flag ~ true; 
     if(Grid.Cell(m,col) = 0)
     begin  
        flag ~ false;
     end 
     if (flag = true)
     begin 
        for (n ~m+1;n<9;n++)
        begin  
           if (Grid.Cell(m,col) = Grid.Cell(n,col))
           begin
              return false;
           end
        end
      end
      return true;
   end
end

checkBlock (int row, int col)
begin
   int lrow;
   int lcol;
   int i;
   int j;
   lrow ~ row/3;                     
   lcol ~ col/3;
   lrow ~ lrow * 3 ;
   lcol ~ lcol * 3 ;
   for( i~ lrow;i< lrow+3;i++)
   begin  
      for ( j~ lcol; i < lcol+3;j++)
      begin
           flag ~ true;
           if(Grid.Cell(i,j) = 0) 
           begin
              flag~ false;
           end
           if(flag = true)
           begin
              if (Grid.Cell(i,j) = Number)
              begin 
                  return false;
              end
            end 
        end 
    end 
end 

generateNum (int row, int col, int time)
begin
   int i;
   int j;
   int k;
   int save;
   if(time = 0)
   begin
      for(i ~0;i<9;i++)
      begin
         num[i] ~ i+1;
      end 
   end
   if(time >=9)
   begin
      return 0 ;
   end
   ranNum ~ Random(9-time);       
   save ~num[8-ranNum];           
   num[8-ranNum] ~ num[ranNum]; 
   num[ranNum] ~ save;
   return num[8- ranNum];
end

