★★翻滚吧硬币★★
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
Special Judge, 64bit IO Format: %lld

题目描述

是一个喜欢动脑的孩子,在他的生日这天,他收到了一份神奇的礼物:三枚硬币以及一封信。
信中描述了这样一个情景:任取两枚硬币固定在二维平面上,并让它们恰好相切,用第三枚硬币沿着它们形成的边界进行翻滚,即时刻保证与至少一枚已固定的硬币相切。这样这枚运动的硬币在翻滚了一定的圈数之后,一定会回到原点,即恰好绕了一周。(如此一来,便会出现三种情况:固定 ,让 运动;固定 ,让 运动;固定 ,让 运动)

信里还说,如果 能求出运动的硬币翻滚的圈数最少是多少,那么他将会收获一份更大的礼物。 非常想要这份大礼,但是又不知道如何解决这个难题,因此他向你求助问题的答案。

输入描述:

第一行一个整数 ,表示测试用例的数量。
对于每组测试用例,输入一行三个整数 ,分别表示三枚硬币的半径。

输出描述:

对于每组测试用例,输出一行一个实数表示答案。只要你的答案与标准答案的绝对或相对误差不超过  则被认为正确。

在形式上,若你的答案是 ,标准答案是 ,那么当且仅当  时,你的答案才会被判定为正确。

示例1

输入

复制
2
1 2 3
5 5 5

输出

复制
1.841387941165222
2.666666666666667

说明

在第一组测试用例中,固定前两枚硬币,用第三枚硬币绕其边界翻滚一周,圈数最少,约为 

在第二组测试用例中,固定其中任意两枚硬币,用第三枚硬币绕其边界翻滚一周,圈数最少,约为