#!/usr/bin/perl

  my $
  my %columns = ();   # columns for dancing.
  my %npcolumns = ();   # non-primary columns for dancing.

  unshift @lines, (join " ", (sort keys %columns), "|", (sort keys %npcolumns));

  open FHAND, ">tempfile.knight";
  print FHAND (join "\n", @lines);
  print FHAND "\n";
  close FHAND;

  print "tempfile written\n";

  open FHAND, "../dance3 -2 <tempfile.knight |";

  while ($line = <FHAND>) {
#    print "A ", $line;
    chomp $line;
    if ($line =~ /^\s*$/) {
      $solcount++;
      my @gg = cleangrid();
      $sol[$solcount] = \@gg;
    } elsif ($line =~ /B(\d)B(\d)/) {
      my $r = $1;
      my $c = $2;
      $sol[$solcount][$r * $col_count + $c] = "X";
    }
  }

  close FHAND;
  
}

sub print_image {
  my @data = @{$_[0]};
  for $r (0..$row_count-1) {
    for $c (0..$col_count-1) {
      my $pos = $r * $col_count + $c;
      if ($grid[$pos] eq '.') {
        print $data[$pos];
      } else {
        print $grid[$pos];
      }
    }
    print "\n";
  }
  print "\n";
}

sub bcount {
  my ($index, $dref) = @_;
  my @data = @{$dref};
  my @neighbors = adjacents($index); 
  my $answer = 0;
  my $n;
  foreach $n (@neighbors) {
    $answer++ if ($data[$n] eq 'X');
  }
  return $answer;
}

sub repeat_until_unique {
  while ((scalar @sol) == 2) {
    my $counter = 0;
    my $rval = int(rand($row_count * $col_count));
    while ($sol[0][$rval] eq 'X' and $sol[1][$rval] eq 'X') {
      $rval = int(rand($row_count * $col_count));
      while ($sol[0][$rval] == $sol[1][$rval] and
             bcount($rval, $sol[0]) == bcount($rval, $sol[1])) {
        $rval = int(rand($row_count * $col_count));
      }
    }
    if ($sol[0][$rval] eq '.') {
      $grid[$rval] = bcount($rval, $sol[0]);
    } else {
      $grid[$rval] = bcount($rval, $sol[1]);
    }
    try_solve;
    print "-------------------------\n";
    print (scalar @sol);
    print "\n";
    print_image($sol[0]);
    print_image($sol[1]);
    print "-------------------------\n";
  }
}

try_solve;

print (scalar @sol);
print "\n";
print_image($sol[0]);
print_image($sol[1]);

repeat_until_unique;

print "      this.height = $row_count; this.width = $col_count;";
print " this.rawanswer = '";
for $pos (0..($row_count*$col_count-1)) {
  if ($grid[$pos] eq '.') {
    print $sol[0][$pos];
  } else {
    print $grid[$pos];
  }
}
print "';\n";



