#! /usr/bin/perl -w

use strict;

my $dict=shift @ARGV;
unless ($dict &&
        -e $dict &&
        -r $dict) {
  die "Can't open dictionary file.\n"
}

chomp (my $template=<>);

my @possible;

my $l=length($template);
open DICT,"<$dict";
while (<DICT>) {
  chomp;
  if (length($_) == $l && /^[- 'a-z]+$/i) {
    push @possible,lc($_);
  }
}

my @letters=('a'..'z');
my %state=map {$_ => 0} @letters;

my $guess='e';
print "$guess\n";
while (<>) {
  chomp;
  $state{$guess}=1;
  my $result=$_;
  if (/!$/) {
    last;
  }
  my $out=join '',(grep {$state{$_}==1} @letters);
  (my $template=$result) =~ s/_/[^$out]/g;
  @possible=grep /^$template$/, @possible;
  if (scalar @possible == 1) {
    warn "I know the word is \"$possible[0]\".\n";
  }
  my %k;
  my $n=-1;
  while (1) {
    $n=index($result,'_',$n+1);
    if ($n != -1) {
      map {$k{substr($_,$n,1)}++} @possible;
    } else {
      last;
    }
  }
  $guess=[sort {$k{$b} <=> $k{$a}} keys %k]->[0];
  print "$guess\n";
}
