import java.util.*;
import java.util.regex.*;
import java.text.*;
import java.math.*;

public class GraphWalkWithProbabilities
{
	public double findprob(String[] graph, int[] winprob, int[] looseprob, int Start)
	{
		double[] dp = new double[winprob.length];
		dp[Start] = 1;
		double win = 0;
		while (true) {
			double[] newDP = new double[winprob.length];
			double max = 0;
			int maxP = 0;
			for (int j = 0; j < newDP.length; j++) {
				double d = newDP[j];
				if (max < d) {
					max = d;
					maxP = j;
				}
			}
			double plus = dp[maxP] * winprob[maxP];
			win += plus;

			if (plus < 1E-9) {
				return win;
			}
			for (int i = 0; i < dp.length; i++) {
				for (int j = 0; j < dp.length; j++) {
					if (graph[i].charAt(j) == '1') {
						newDP[i] = Math.max(newDP[i],
								dp[j] * (1.0*winprob[i] / (winprob[i] + looseprob[i])));
					}
				}
			}
			dp = newDP;
		}
	}

	// BEGIN KAWIGIEDIT TESTING
	// Generated by KawigiEdit-pf 2.3.0
	private static boolean KawigiEdit_RunTest(int testNum, String[] p0, int[] p1, int[] p2, int p3, boolean hasAnswer,
			double p4) {
		System.out.print("Test " + testNum + ": [" + "{");
		for (int i = 0; p0.length > i; ++i) {
			if (i > 0) {
				System.out.print(",");
			}
			System.out.print("\"" + p0[i] + "\"");
		}
		System.out.print("}" + "," + "{");
		for (int i = 0; p1.length > i; ++i) {
			if (i > 0) {
				System.out.print(",");
			}
			System.out.print(p1[i]);
		}
		System.out.print("}" + "," + "{");
		for (int i = 0; p2.length > i; ++i) {
			if (i > 0) {
				System.out.print(",");
			}
			System.out.print(p2[i]);
		}
		System.out.print("}" + "," + p3);
		System.out.println("]");
		GraphWalkWithProbabilities obj;
		double answer;
		obj = new GraphWalkWithProbabilities();
		long startTime = System.currentTimeMillis();
		answer = obj.findprob(p0, p1, p2, p3);
		long endTime = System.currentTimeMillis();
		boolean res;
		res = true;
		System.out.println("Time: " + (endTime - startTime) / 1000.0 + " seconds");
		if (hasAnswer) {
			res = answer == answer && Math.abs(p4 - answer) <= 1e-9 * Math.max(1.0, Math.abs(p4));
		}
		if (!res) {
			System.out.println("DOESN'T MATCH!!!!");
			if (hasAnswer) {
				System.out.println("Desired answer:");
				System.out.println("\t" + p4);
			}
			System.out.println("Your answer:");
			System.out.println("\t" + answer);
		} else if ((endTime - startTime) / 1000.0 >= 2) {
			System.out.println("FAIL the timeout");
			res = false;
		} else if (hasAnswer) {
			System.out.println("Match :-)");
		} else {
			System.out.println("OK, but is it right?");
		}
		System.out.println("");
		return res;
	}

	public static void main(String[] args) {
		boolean all_right;
		boolean disabled;
		boolean tests_disabled;
		all_right = true;
		tests_disabled = false;

		String[] p0;
		int[] p1;
		int[] p2;
		int p3;
		double p4;

		// ----- test 0 -----
		disabled = true;
		p0 = new String[] { "1" };
		p1 = new int[] { 1 };
		p2 = new int[] { 1 };
		p3 = 0;
		p4 = 0.5D;
		all_right = (disabled || KawigiEdit_RunTest(0, p0, p1, p2, p3, true, p4)) && all_right;
		tests_disabled = tests_disabled || disabled;
		// ------------------

		// ----- test 1 -----
		disabled = true;
		p0 = new String[] { "11", "11" };
		p1 = new int[] { 60, 40 };
		p2 = new int[] { 40, 60 };
		p3 = 0;
		p4 = 0.6D;
		all_right = (disabled || KawigiEdit_RunTest(1, p0, p1, p2, p3, true, p4)) && all_right;
		tests_disabled = tests_disabled || disabled;
		// ------------------

		// ----- test 2 -----
		disabled = false;
		p0 = new String[] { "11", "11" };
		p1 = new int[] { 2, 3 };
		p2 = new int[] { 3, 4 };
		p3 = 0;
		p4 = 0.4285714285714286D;
		all_right = (disabled || KawigiEdit_RunTest(2, p0, p1, p2, p3, true, p4)) && all_right;
		tests_disabled = tests_disabled || disabled;
		// ------------------

		// ----- test 3 -----
		disabled = false;
		p0 = new String[] { "110", "011", "001" };
		p1 = new int[] { 2, 1, 10 };
		p2 = new int[] { 20, 20, 10 };
		p3 = 0;
		p4 = 0.405D;
		all_right = (disabled || KawigiEdit_RunTest(3, p0, p1, p2, p3, true, p4)) && all_right;
		tests_disabled = tests_disabled || disabled;
		// ------------------

		// ----- test 4 -----
		disabled = false;
		p0 = new String[] { "111", "111", "011" };
		p1 = new int[] { 100, 1, 1 };
		p2 = new int[] { 0, 50, 50 };
		p3 = 2;
		p4 = 0.5D;
		all_right = (disabled || KawigiEdit_RunTest(4, p0, p1, p2, p3, true, p4)) && all_right;
		tests_disabled = tests_disabled || disabled;
		// ------------------

		if (all_right) {
			if (tests_disabled) {
				System.out.println("You're a stud (but some test cases were disabled)!");
			} else {
				System.out.println("You're a stud (at least on given cases)!");
			}
		} else {
			System.out.println("Some of the test cases had errors.");
		}
	}
	// END KAWIGIEDIT TESTING
}

// Powered by KawigiEdit-pf 2.3.0!