N门问题
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

火山哥参加了一个抽(猜)奖活动。
现在他的面前有 扇门,只有1扇门的背后有大奖,其余的门后都是空的。活动有一个主持人,他事先知道哪扇门后有大奖。每次当火山哥选择一扇门(不打开)后,主持人会从剩下的没有打开的、且不是对应大奖的门中,等概率地随机挑选一扇门打开,然后再给火山哥一次选择门的机会(火山哥可以选择保持之前的选择不变或者换成任意一扇他想要的门),直到只剩两扇门为止,此时火山哥的选择就是他的最终选择。
火山哥想获得大奖,但他不知道任何信息,于是他决定每次在"所有可选的门"中挑选一个"在他的视角中背后有奖的概率最大"的门,如果这样的门有多个,则他会在其中等概率地随机挑选一个。(显然第一次选门时,他的视角中每扇门背后有大奖的概率都是 ,所以他会随机在 扇门中选一扇)
换言之,火山哥选门的过程可以抽象为以下过程:
  •  while(剩余门的数量 >= 2):
  • 火山哥按照上文所述选定一扇门,不打开
  • if(剩余门的数量 == 2):
  • 这扇门是火山哥的最终选择; break;
  • 主持人按照上文所述打开一扇门(同时意味着剩余门的数量-1)
  • 火山哥重新计算每扇门后有奖的概率
现在活动主办方安排你作为主持人,并要求你埋伏火山哥一手,换言之你每次可以在剩下的门中(除了火山哥选择的和最终大奖的门之外)主动选择某扇门(而非随机地)来打开,目的就是让火山哥最终选择到大奖门的概率最小。现在给你 ,求这个最小的概率。
注意: 火山哥并不知道你的存在。换言之,他依然认为主持人是正常的而不会去揣测他的用意。

输入描述:

输入由一系列同余方程构成,题中  为该同余方程的最小非负整数解。
第一行一个正整数 ,代表同余方程的个数。
接下来 行,每行两个整数,代表
对于全部数据,

输出描述:

如果这样的  不存在,或者 ,输出一行“error”(不含引号)
否则输出一个六位小数,代表问题的答案。
示例1

输入

复制
2
1 7
1 13

输出

复制
error
示例2

输入

复制
3
0 1
2 3
5 7

输出

复制
0.466667