import java.util.*;

public class Euler155 {
    static long gcd(long a, long b) {
        while (b != 0) {
            long t = b;
            b = a % b;
            a = t;
        }
        return a;
    }

    static long pack(long n, long d) {
        long g = gcd(n, d);
        return ((n / g) << 32) | (d / g);
    }

    static long parPack(long a, long b) {
        long an = a >>> 32, ad = a & 0xFFFFFFFFL;
        long bn = b >>> 32, bd = b & 0xFFFFFFFFL;
        long num = an * bd + bn * ad, den = ad * bd;
        long g = gcd(num, den);
        return ((num / g) << 32) | (den / g);
    }

    public static String solve() {
        int maxN = 18;
        List<Set<Long>> ways = new ArrayList<>();
        for (int i = 0; i <= maxN; i++)
            ways.add(new HashSet<>());
        long one = pack(1, 1);
        ways.get(1).add(one);
        Set<Long> all = new HashSet<>();
        all.add(one);
        for (int n = 2; n <= maxN; n++) {
            Set<Long> cur = new HashSet<>();
            for (int a = 1; a <= n / 2; a++) {
                int b = n - a;
                for (long fi : ways.get(a)) {
                    for (long fj : ways.get(b)) {
                        long p = parPack(fi, fj);
                        cur.add(p);
                        long pn = p >>> 32, pd = p & 0xFFFFFFFFL;
                        if (pn != pd)
                            cur.add(pack(pd, pn));
                    }
                }
            }
            ways.set(n, cur);
            all.addAll(cur);
        }
        return String.valueOf(all.size());
    }

    public static void main(String[] args) {
        System.out.println(solve());
    }
}
