#!/usr/bin/perl -w

use strict;

my ($z,$count);
for my $i (102..987){
    my ($R,$E,$D) = split "", $i;
    next if ($R eq $E || $R eq $D || $E eq $D);
    for my $j (102..987){
	my ($F,$O,$R2) = split "", $j;
	next if ($R2 ne $R);
	next if ($F eq $O || $F eq $R || $O eq $R);
	next if ($E eq $F || $E eq $O || $E eq $R ||
	    $D eq $F || $D eq $O || $D eq $R
	);
	my $danger = $i*$j;
	next if (cuenta($F,$danger) !=0 );
	next if (cuenta($O,$danger) !=0 );
	next if (length($danger)!=6);
	my ($d,$a,$n,$g,$e,$r) = split "", $danger;
	next if ($d ne $D || $e ne $E || $r ne $R);
#	$z = $i.$j;
#	next if (cuenta($a,$z) !=0 );
#	next if (cuenta($n,$z) !=0 );
#	next if (cuenta($g,$z) !=0 );
	next if ($a eq $n || $a eq $g || $n eq $g ||
	    $d eq $a || $d eq $n || $d eq $g ||
	    $e eq $a || $e eq $n || $e eq $g ||
	    $r eq $a || $r eq $n || $r eq $g
	);
	$z = $i.$j.$danger;
	next if (cuenta($a,$z) !=1);
	next if (cuenta($n,$z) !=1);
	next if (cuenta($g,$z) !=1);
	next if (cuenta($r,$z) !=3);
	next if (cuenta($e,$z) !=2);
	next if (cuenta($d,$z) !=2);
	$count++;
	print "Solución $count\n";
	print "   $i\n";
	print "x  $j\n";
	print "------\n";
	print "$danger\n\n";
    }
}

sub cuenta{
    my ($char, $string) = @_;
#    my $c = 0;
#    ++$c while ($cadena =~ /$letra/g);
#    return $c;
    return scalar( () = $string =~ /$char/g );
}

__END__
  ! ----------------------------------------------------------
  ! This program solve the following puzzle:
  !                RED
  !            x   FOR
  !            -------
  !             DANGER
  ! where each distinct letter represents a different digit.
  ! Moreover, R, F and D cannot be zero.
  ! ----------------------------------------------------------
  
