def link_chance(p, n):
    return (1-p)**(n-1) * p
    
def success_chance_under(p, n):
	return sum(link_chance(p, i) for i in range(1, n))
	
def find_p_known_median(m, e=.0000001, p1=0., p2=1.):
	p = (p1 + p2) / 2
	s = success_chance_under(p, m)
	if   s < 0.5-e:
		return find_p_known_median(m, e, p, p2)
	elif s > 0.5+e:
		return find_p_known_median(m, e, p1, p)
	else:
		return p

print '6L'
n = 1500
print 'p=1/%d, under %d fusing: %.06f' % (1400, n, success_chance_under(1./1400, n))
print 'p=1/%d, under %d fusing: %.06f' % (1500, n, success_chance_under(1./1500, n))
n = 5
print 'p=1/%d, under %d fusing: %.06f' % (1500, n, success_chance_under(1./1500, n))
n = 2
print 'p=1/%d, under %d fusing: %.06f' % (1500, n, success_chance_under(1./1500, n))
n = 2000
print 'p=1/%d, under %d fusing: %.06f' % (1500, n, success_chance_under(1./1500, n))
n = 4000
print 'p=1/%d, under %d fusing: %.06f' % (1500, n, success_chance_under(1./1500, n))
n = 10000
print 'p=1/%d, under %d fusing: %.06f' % (1500, n, success_chance_under(1./1500, n))

i = 1
s = 0
while s < 0.5:
	s += link_chance(1./1500, i)
	i += 1
print 'p=1/%d, under %d fusing: %.06f' % (1500, i, s)

print 1.0/find_p_known_median(1500)
print 1.0/find_p_known_median(1501)

print '\n5L'
n = 150
print 'p=1/%d, under %d fusing: %.06f' % (150, n, success_chance_under(1./150, n))
