// janken2.js 5/10/03 by M.Inamori

import System;

var t : int = Environment.TickCount;
var n : int;
var args : String[] = Environment.GetCommandLineArgs();
try {
	if(args.length != 2)
		throw(1);
	n = parseInt(args[1]);
	if(isNaN(n))
		throw(1);
	if(n <= 1)
		throw(1);
}
catch(e) {
	print("usage : janken n\nn : must be larger than 1.");
	Environment.Exit(1);
}

//m人がじゃんけんしたときにi人が残る確率を求める
var p : double[][] = new (double[])[n+1];
p[2] = new double[n+1];
p[2][1] = 2 / 3;
p[2][2] = 1 / 3;
var q : double[];	//q[m] = 1 - p[m][m]
q = new double[n+1];
q[2] = 2 / 3;
for(var m : int = 3; m <= n; m++) {
	p[m] = new double[n+1];
	p[m][1] = p[m-1][1] * m / (m - 1) / 3;
	q[m] = p[m][1];
	for(var i : int = 2; i < m; i++) {
		p[m][i] = p[m][i-1] * (m - i + 1) / i;
		q[m] += p[m][i];
	}
	p[m][m] = 1 - q[m];
}

//n人がじゃんけんして1人が残るまでの回数の期待値を求める
var E : double[] = new double[n+1];
E[1] = 0;
for(var j : int = 2; j <= n; j++) {
	var a : double = p[j][j];
	for(i = 1; i < j; i++)
		a += p[j][i] * (E[i] + 1);
	E[j] = a / q[j];
}
print("E[" + n + "] : " + E[n]);
print((Environment.TickCount - t) + "ms");
