public class Euler449 {
    private static double integrand(double theta, double a, double b) {
        double s = Math.sin(theta);
        double c = Math.cos(theta);
        double aa = a * a;
        double bb = b * b;
        double e = Math.sqrt((s * s) / aa + (c * c) / bb);

        double r = s * (a + 1.0 / (a * e));
        double minusZPrime = s * (b + 1.0 / (b * e) + (c * c / b) * (1.0 / aa - 1.0 / bb) / (e * e * e));
        return r * r * minusZPrime;
    }

    private static double simpson(double l, double r, double a, double b) {
        double m = (l + r) * 0.5;
        return (r - l) * (integrand(l, a, b) + 4.0 * integrand(m, a, b) + integrand(r, a, b)) / 6.0;
    }

    private static double adaptiveSimpson(double l, double r, double eps, double whole, int depth, double a, double b) {
        double m = (l + r) * 0.5;
        double left = simpson(l, m, a, b);
        double right = simpson(m, r, a, b);
        double delta = left + right - whole;

        if (depth <= 0 || Math.abs(delta) <= 15.0 * eps) {
            return left + right + delta / 15.0;
        }
        return adaptiveSimpson(l, m, eps * 0.5, left, depth - 1, a, b) +
                adaptiveSimpson(m, r, eps * 0.5, right, depth - 1, a, b);
    }

    private static double computeChocolateVolume(double a, double b) {
        double pi = 3.141592653589793238462643383279502884;
        double halfPi = pi * 0.5;

        double whole = simpson(0.0, halfPi, a, b);
        double integral = adaptiveSimpson(0.0, halfPi, 1e-14, whole, 24, a, b);

        double outer = 2.0 * pi * integral;
        double inner = 4.0 * pi * a * a * b / 3.0;
        return outer - inner;
    }

    public static String solve() {
        double ans = computeChocolateVolume(3.0, 1.0);
        return String.format(java.util.Locale.US, "%.8f", ans);
    }

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