use strict;
use warnings;
use feature qw(say);

my @pattern = (
	undef,
	undef,
	[1],
	[1, 2],
	[1, 3],
	[1, 2, 3, 4],
	[1, 5],
	[1, 2, 3, 4, 5, 6],
	[1, 3, 5, 7],
	[1, 2, 4, 5, 7, 8],
);

my @mask = (0, 1, 2, 4, 8, 16, 32, 64, 128, 256);

sub permute {
	my ($n, $v, $b, $s) = @_;

	if ($n < 1){
		$s->($v, $b);
		return;
	}
	foreach my $i (1..9){
		($b & $mask[$i]) and next;
		permute($n - 1,  $v * 10 + $i, $b | $mask[$i], $s);
	}
}

my $total = 0;

foreach my $i (1..8){
	my %memo;
	permute($i, 0, 0, sub{
		my ($d, $db) = @_;

		foreach my $dp (2..9){
			(not ($db & $mask[$dp]) or ($d % $dp)) and next;
			foreach my $np (@{$pattern[$dp]}){
				my $n  = $d / $dp * $np;
				my $nb = $memo{$n} or next;
				(($nb ^ $mask[$np]) == ($db ^ $mask[$dp])) or next;
				# say "$n/$d";
				$total++;
			}
		}

		$memo{$d} = $db;
	});
}

say $total;
