public class Euler287 {
    static long encodeLengthFast(int n) {
        int size = 1 << n;
        long c = 1L << (n - 1);
        long r2 = 1L << (2 * n - 2);

        return rec(0, 0, size, c, r2);
    }

    static long rec(long x0, long y0, long side, long c, long r2) {
        long x1 = x0 + side - 1;
        long y1 = y0 + side - 1;

        long nearestX = Math.max(x0, Math.min(c, x1));
        long nearestY = Math.max(y0, Math.min(c, y1));

        long dxMin = nearestX - c;
        long dyMin = nearestY - c;
        long minD2 = dxMin * dxMin + dyMin * dyMin;

        long dxMax = Math.max(Math.abs(x0 - c), Math.abs(x1 - c));
        long dyMax = Math.max(Math.abs(y0 - c), Math.abs(y1 - c));
        long maxD2 = dxMax * dxMax + dyMax * dyMax;

        if (maxD2 <= r2 || minD2 > r2) {
            return 2L;
        }

        long half = side / 2;
        return 1L + rec(x0, y0 + half, half, c, r2) +
                rec(x0 + half, y0 + half, half, c, r2) +
                rec(x0, y0, half, c, r2) +
                rec(x0 + half, y0, half, c, r2);
    }

    public static String solve() {
        int n = 24;
        return String.valueOf(encodeLengthFast(n));
    }

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