#!/usr/bin/perl -w

my $lang = $ARGV[1] || "ngerman";
my $nr   = $ARGV[0] || die "usage $0 {number} [dict]";

open DB, "</usr/share/dict/$lang"  or die $!;

my %words = ();
while(<DB>){
	chomp;
	next if(length $_ > length $nr);
	$words{ lc $_ }++
}


sub tore {
	my $s = shift;
	$s =~ s/0/./g;
	$s =~ s/1/[1+\\-!?]/g;
	$s =~ s/2/[2abcä]/g;
	$s =~ s/3/[3def]/g;
	$s =~ s/4/[4ghi]/g;
	$s =~ s/5/[5jkl]/g;
	$s =~ s/6/[6mnoö]/g;
	$s =~ s/7/[7pqrsß]/g;
	$s =~ s/8/[8tuvü]/g;
	$s =~ s/9/[9wxyz]/g;
	$s
}


sub tow {
	my $n = shift;
	return () if(! length $n);
	my @p = ();
	foreach my $l (1..length($n)){
		my $x = "." x $l;
		my ($s,$t) = $n =~ /^($x)(.*)$/;

		my $post = ($s =~ /[01]$/) ? chop $s : "" ;

		my @after = tow($t);
		next if($t and scalar(@after)==0);

		$s = tore($s);
		foreach (keys %words) {
			if(/^\s*$s\s*$/){
				next if(length $_ == 1 and $_ ne "i");
				foreach my $a (@after){
					push @p, "$_$post-$a"
				}
				if(!scalar(@after)){push @p, "$_$post"}
			}
		}
	}
	@p
}

print "Searching for $nr in $lang\n";

print join "\n",tow($nr), "\n";
