var check=new Array(81);
for (var i=0;i<81;i++){
    var num=0,oldIndex=0;
    check[i] = new Array(20);
    var r=parseInt(i/9);var c=i%9;
    // get the same column
    for (var row=c;row<81;row+=9)
      if (row!=i)
         check[i][num++]=row;
    // get the same row
    for (var col=r*9;col<r*9+9;col+=1)
      if (col!=i)
        check[i][num++]=col;
    // get the box
    var lR=parseInt(r/3)*3;
    var lC=parseInt(c/3)*3;
    var index=lR*9+lC;
    for (var row=lR;row<lR+3;row++)
      if (r!=row)
        for (var col=lC;col<lC+3;col++)
          if (c!=col)
            check[i][num++]=row*9+col;}
var powerOfTwo = 1, allPossible = 0, binaryValues = new Array(10);
for (var i=1; i<10; i++){
  binaryValues[i] = powerOfTwo;
  allPossible += powerOfTwo;
  powerOfTwo = powerOfTwo << 1;}
var isPowerOfTwo = new Array(allPossible);
for (var i=1; i<10; i++) isPowerOfTwo[binaryValues[i]] = true;