//正多边形内有一点
//给出这点到多边形各个顶点的距离
//求这个多边形的边长
//比赛时瞎了,各种精度
#include <iostream>
#include <cstring>
#include <cstdio>
#include <cmath>
#include <queue>
#include <stack>
#include <set>
#include <string>
#include <algorithm>
using namespace std;
#define NUM_INF 0xFFFFFFFF
const double eps = 1e-10;
double m[110][2];
int n;
const double Pi = acos(-1.0);
int jud(double mid)
{
double sum;
sum = 0.0;
int i;
double temp;
for(i=0;i<n;i++)
{
if(mid>(m[i][0]+m[i][1])-eps) return 1;
if(mid<fabs(m[i][0]-m[i][1])+eps) return -1;
temp = (m[i][0]*m[i][0]+m[i][1]*m[i][1]-mid*mid)/(2.0*m[i][0]*m[i][1]);
sum += acos(temp);
}
// printf("%.8lf %.8lf\n",mid,sum);
if(sum-Pi*2.0> eps)0
return 1;
if(sum-Pi*2.0< -eps)
return -1;
else
return 0;
}
int main()
{
int i;
int t;
// freopen("a.out", "w", stdout);
int cases = 0;
double l,r,temp;
r = 100000;
l = -1000;
scanf("%d",&t);
while(t--)
{
cases++;
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%lf",&m[i][1]);
m[i+1][0] = m[i][1];
}
m[0][0] = m[n][0];
// printf("%d\n",jud(6.676));
bool flat = false;
double mid;
int temp1;
l = 0;
r = 20000;
while((r-l)>eps)
{
mid = (r+l)/2.0;
temp1 = jud(mid);
if(temp1==0)
{
flat = true;
break;
}
if(temp1<0)
l = mid;
else
r= mid;
}
if(!flat)
printf("Case %d: impossible\n",cases);
else
printf("Case %d: %.3lf\n",cases,mid);
}
return 0;
}