Problem: SmallR is an archer. SmallR is taking a match of archer with Zanoes. They try to shoot in the target in turns, and SmallR shoots first. The probability of shooting the target each time is <image> for SmallR while <image> for Zanoes. The one who shoots in the target first should be the winner.

Output the probability that SmallR will win the match.

Input

A single line contains four integers <image>.

Output

Print a single real number, the probability that SmallR will win the match.

The answer will be considered correct if the absolute or relative error doesn't exceed 10 - 6.

Examples

Input

1 2 1 2


Output

0.666666666667

Solution (in JAVA):

Solution:
import java.io.*;
import java.util.*;

public class Main {

	public static void main(String[] args) throws Exception {
		FastScanner fs = new FastScanner();
		PrintWriter out = new PrintWriter(System.out);

		new Main();

		out.close();
	}

	Main () {

		Scanner s = new Scanner(System.in);
		
		int a = s.nextInt();
		int b = s.nextInt();
		int c = s.nextInt();
		int d = s.nextInt();
		
		double ab = (double)a/b;
		double cd = (double)c/d;
		
		double win = ab;
		double lose = 1.0 - ab;
		
		double res = win;
		for(int shot = 2; shot <= 20000; shot++) {
			if(shot%2 == 1) {
				double mult = lose;
				double w = ab * mult;
				double l = (1.0 - ab) * mult;
				res += w;
				win = w;
				lose = l;
				
			} else {
				double mult = lose;
				double w = cd * mult;
				double l = (1.0 - cd) * mult;
				win = w;
				lose = l;
			}
		}
		
		System.out.println(res);
		
	}
	
	long nchoosek (long n, long k) {
		return fact(n) / (fact(k)*fact(n-k));
	}
	
	long fact (long x) {
		long res = 1;
		while(x>1) {res*=x; x--;}
		return res;
	}

	static class FastScanner {
		BufferedReader br;
		StringTokenizer st;
		public FastScanner() {
			try	{
				br = new BufferedReader(new InputStreamReader(System.in));
				//				br = new BufferedReader(new FileReader("testdata.out"));
				st = new StringTokenizer("");
			} catch (Exception e){e.printStackTrace();}
		}
		public String next() {
			if (st.hasMoreTokens())	return st.nextToken();
			try {st = new StringTokenizer(br.readLine());}
			catch (Exception e) {e.printStackTrace();}
			return st.nextToken();
		}
		public int nextInt() {return Integer.parseInt(next());}
		public long nextLong() {return Long.parseLong(next());}
		public double nextDouble() {return Double.parseDouble(next());}

		public String nextLine() {
			String line = "";
			try {line = br.readLine();}
			catch (Exception e) {e.printStackTrace();}
			return line;
		}
		public Integer[] nextIntegerArray(int n) {
			Integer[] a = new Integer[n];
			for(int i = 0; i < n; i++) a[i] = nextInt();
			return a;
		}
		public int[] nextIntArray(int n) {
			int[] a = new int[n];
			for(int i = 0; i < n; i++) a[i] = nextInt();
			return a;
		}
		public char[] nextCharArray() {return nextLine().toCharArray();}
	}

}