import java.util.*;

public class Euler118 {
    static boolean isPrime(int n) {
        if(n<2)return false;if(n%2==0)return n==2;
        for(int p=3;(long)p*p<=n;p+=2)if(n%p==0)return false;
        return true;
    }
    static List<int[]> entries = new ArrayList<>();
    static void gen(int mask, int val) {
        if(val>0&&isPrime(val))entries.add(new int[]{val,mask});
        for(int d=1;d<=9;d++){int bit=1<<(d-1);if((mask&bit)!=0)continue;gen(mask|bit,val*10+d);}
    }
    public static void main(String[] args) {
        gen(0,0); int full=(1<<9)-1;
        Set<Long> seen = new HashSet<>(); List<int[]> unique = new ArrayList<>();
        for(int[] e:entries){long key=((long)e[0]<<16)|e[1];if(seen.add(key))unique.add(e);}
        entries=unique; long[] memo=new long[1<<9]; Arrays.fill(memo,-1);
        System.out.println(dfs(full,memo));
    }
    static long dfs(int rem, long[] memo) {
        if(rem==0)return 1;if(memo[rem]!=-1)return memo[rem];
        int anchor=rem&(-rem);long tot=0;
        for(int[] e:entries){if((e[1]&anchor)==0)continue;if((e[1]&rem)!=e[1])continue;tot+=dfs(rem^e[1],memo);}
        return memo[rem]=tot;
    }
}
