Problem: The determinant of a matrix 2 × 2 is defined as follows:

<image>

A matrix is called degenerate if its determinant is equal to zero. 

The norm ||A|| of a matrix A is defined as a maximum of absolute values of its elements.

You are given a matrix <image>. Consider any degenerate matrix B such that norm ||A - B|| is minimum possible. Determine ||A - B||.

Input

The first line contains two integers a and b (|a|, |b| ≤ 109), the elements of the first row of matrix A. 

The second line contains two integers c and d (|c|, |d| ≤ 109) the elements of the second row of matrix A.

Output

Output a single real number, the minimum possible value of ||A - B||. Your answer is considered to be correct if its absolute or relative error does not exceed 10 - 9.

Examples

Input

1 2
3 4


Output

0.2000000000


Input

1 0
0 1


Output

0.5000000000

Note

In the first sample matrix B is <image>

In the second sample matrix B is <image>

Solution (in JAVA):

Solution:
import java.util.*;

public class Main {
	public static void main(String[] args) {
		Scanner s = new Scanner(System.in);
		double a = s.nextDouble();
		double b = s.nextDouble();
		double c = s.nextDouble();
		double d = s.nextDouble();
		double d1 = Double.MAX_VALUE;
		if (b+c-a-d != 0)
			d1 = Math.abs(((double)(a*d-b*c))/(b+c-a-d));
		double d21 = Double.MAX_VALUE;
		double d22 = Double.MAX_VALUE;
		double delta = Math.pow(d-b-c-a, 2.0)-8.0*(b*c-a*d);
		if (delta >= 0) {
			delta = Math.sqrt(delta);
			d21 = Math.abs((d-b-c-a+delta)/4.0);
			d22 = Math.abs((d-b-c-a-delta)/4.0);
		}
		double d3 = Double.MAX_VALUE;
		if (a+b+c+d != 0)
			d3 = Math.abs(((double)(b*c-a*d))/(a+b+c+d));
		double d41 = Double.MAX_VALUE;
		double d42 = Double.MAX_VALUE;
		delta = Math.pow(d+b+c-a, 2.0) - 8.0*(b*c-a*d);
		if (delta >= 0) {
			delta = Math.sqrt(delta);
			d41 = Math.abs((d+b+c-a+delta)/4.0);
			d42 = Math.abs((d+b+c-a-delta)/4.0);
		}
		double d51 = Double.MAX_VALUE;
		double d52 = Double.MAX_VALUE;
		delta = Math.pow(a+d+b-c, 2.0) - 8.0*(a*d-b*c);
		if (delta >= 0) {
			delta = Math.sqrt(delta);
			d51 = Math.abs((a+d+b-c+delta)/4.0);
			d52 = Math.abs((a+d+b-c-delta)/4.0);
		}
		double d6 = Double.MAX_VALUE;
		if (c-b+a-d != 0)
			d6 = Math.abs(((double)(a*d-b*c))/(c-b+a-d));
		double d71 = Double.MAX_VALUE;
		double d72 = Double.MAX_VALUE;
		delta = Math.pow(b-a-d-c, 2.0)-8.0*(a*d-b*c);
		if (delta >= 0) {
			delta = Math.sqrt(delta);
			d71 = Math.abs((b-a-d-c+delta)/4.0);
			d72 = Math.abs((b-a-d-c-delta)/4.0);
		}
		double d8 = Double.MAX_VALUE;
		if (b+a-c-d != 0)
			d8 = Math.abs(((double)a*d-b*c)/(b+a-c-d));
/*		System.out.println(d1 + " " +
		d21 + " " +
		d22 + " " + 
		d3 + " " +
		d41 + " " +
		d42 + " " +
		d51 + " " +
		d52 + " " +
		d6 + " " +
		d71 + " " +
		d72 + " " +
		d8);*/
		double min = Math.min(Math.min(d1, d3), Math.min(d6, d8));
		if (min == Double.MAX_VALUE)
			min = 0;
		System.out.println(String.format("%.10f", min));
	}
}