import java.util.Arrays;

public class Euler222 {
    static double distanceY(int pipeRadius, int a, int b) {
        double sum = a + b;
        double side = 2.0 * pipeRadius - sum;
        return Math.sqrt(sum * sum - side * side);
    }

    static int minRadius = 30;
    static int maxRadius = 50;
    static int pipeRadius = 50;
    static int numBalls;
    static int shift;
    static double[] cache;

    static int indexOf(int radius) {
        return radius - minRadius;
    }

    static double dfs(int mask, int lastRadius) {
        if (mask == 0) {
            return distanceY(pipeRadius, lastRadius, maxRadius) + maxRadius;
        }

        int id = mask + (indexOf(lastRadius) << shift);
        if (cache[id] >= 0.0) {
            return cache[id];
        }

        double best = Double.POSITIVE_INFINITY;
        for (int radius = minRadius; radius <= maxRadius; ++radius) {
            int bit = 1 << indexOf(radius);
            if ((mask & bit) == 0)
                continue;
            double cand = distanceY(pipeRadius, radius, lastRadius) + dfs(mask & ~bit, radius);
            if (cand < best)
                best = cand;
        }

        cache[id] = best;
        return best;
    }

    public static String solve() {
        numBalls = maxRadius - minRadius + 1;
        if (numBalls == 1) {
            return String.valueOf(Math.round(1000.0 * (maxRadius * 2)));
        }

        shift = numBalls - 2;
        cache = new double[(1 << shift) * numBalls];
        Arrays.fill(cache, -1.0);

        int mask = (1 << numBalls) - 1;
        mask &= ~(1 << indexOf(maxRadius));
        mask &= ~(1 << indexOf(maxRadius - 1));

        int first = maxRadius - 1;
        double ans = first + dfs(mask, first);

        return String.valueOf(Math.round(1000.0 * ans));
    }

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