/*
 * Circle Garden
 * Fred Pickel
 * ICPC GNYR Contest
 */
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

#define MAX_PROB	1000
#define MAX_SEG		100
#define EPS		(1.0e-6)
#define	MIN_SEG_SZ	1.0
#define MAX_SEG_SZ	240.0
#define MAX_RAD		(10.0*12)

double segs[MAX_SEG];
int nseg, maxind;
double maxseg, segsum, circ_radius;
const double D_PI = 3.14159265358979323846;

double FanAngle(double radius)
{
	int i;
	double ang, angsum, ovdenom;
	if(radius < (0.5*maxseg)) {
		return -1.0;
	}
	ovdenom = 1.0/(2.0*radius);
	for(i = 0, angsum = 0.0; i < nseg; i++) {
		ang = asin(segs[i]*ovdenom);
		angsum += ang;
	}
	return angsum;
}

double OneSideAngle(double radius)
{
	int i;
	double ang, angsum, ovdenom, maxang;
	if(radius < (0.5*maxseg)) {
		return -1.0;
	}
	ovdenom = 1.0/(2.0*radius);
	for(i = 0, angsum = 0.0; i < nseg; i++) {
		ang = asin(segs[i]*ovdenom);
		if(i == maxind) {
			maxang = ang;
		} else {
			angsum += ang;
		}
	}
	return (maxang - angsum);
}

double OneSidedRadius()
{
	double minrad, minang, maxrad, maxang, currad, curang, dadr, diff;
	int cnt = 50;

	minrad = 0.5*maxseg;
	minang = OneSideAngle(minrad);
	if(fabs(minang) < EPS) {
		return minrad;
	}
	if(minang < 0.0) {	// should not happen
		return -7.0;
	}
	maxrad = MAX_RAD;
	maxang = OneSideAngle(maxrad);
	if(fabs(maxang) < EPS) {
		return maxrad;
	}
	if(maxang > 0.0) {
		return -3.0;
	}
	currad = 0.5*(minrad + maxrad);
	curang = OneSideAngle(currad);
	if(fabs(curang) < EPS) {
		return currad;
	}
	if(curang < 0.0) {
		maxang = curang;
		maxrad = currad;
	} else {
		minang = curang;
		minrad = currad;
	}
	while(cnt > 0) {
		cnt--;
		diff = maxrad - minrad;
		if(diff > 0.01) {
			dadr = 100.0*(OneSideAngle(currad + 0.01) - curang);
		} else {
			dadr = (OneSideAngle(currad + diff) - curang)/diff;
		}
		currad = currad - (curang)/dadr;
		if(currad < minrad) {
			currad = 0.75*minrad + 0.25*maxrad;
		} else if(currad > maxrad) {
			currad = 0.25*minrad + 0.75*maxrad;
		}
		curang = OneSideAngle(currad);
		if(fabs(curang) < EPS) {
			return currad;
		}
		if(curang < 0.0) {
			maxang = curang;
			maxrad = currad;
		} else {
			minang = curang;
			minrad = currad;
		}
	}
	return -4.0;
}

int FindRadius(void)
{
	double minrad, minang, maxrad, maxang, currad, curang, dadr, diff;
	int cnt = 50;
	if(2.0*maxseg > segsum) {
		return -1;
	}
	minrad = 0.5*maxseg;
	if(minrad > MAX_RAD) {
		return -3;
	}
	minang = FanAngle(minrad);
	if(minang < D_PI) {
//		return OneSidedRadius();
		return -2;
	}
	if(fabs(minang - D_PI) < EPS) {
		circ_radius = minrad;
		return 0;
	}
	maxrad = MAX_RAD;
	maxang = FanAngle(maxrad);
	if(fabs(maxang - D_PI) < EPS) {
		circ_radius = maxrad;
		return 0;
	}
	if(maxang > D_PI) {
		return -3;
	}
	currad = 0.5*(minrad + maxrad);
	curang = FanAngle(currad);
	if(fabs(curang - D_PI) < EPS) {
		circ_radius = currad;
		return 0;
	}
	if(curang < D_PI) {
		maxang = curang;
		maxrad = currad;
	} else {
		minang = curang;
		minrad = currad;
	}
	while(cnt > 0) {
		cnt--;
		diff = maxrad - minrad;
		if(diff > 0.01) {
			dadr = 100.0*(FanAngle(currad + 0.01) - curang);
		} else {
			dadr = (FanAngle(currad + diff) - curang)/diff;
		}
		currad = currad - (curang - D_PI)/dadr;
		if(currad < minrad) {
			currad = 0.75*minrad + 0.25*maxrad;
		} else if(currad > maxrad) {
			currad = 0.25*minrad + 0.75*maxrad;
		}
		curang = FanAngle(currad);
		if(fabs(curang - D_PI) < EPS) {
			circ_radius = currad;
			return 0;
		}
		if(curang < D_PI) {
			maxang = curang;
			maxrad = currad;
		} else {
			minang = curang;
			minrad = currad;
		}
	}
	return -4;
}

int main()
{
	int i, ret;
	if(scanf("%d", &nseg) != 1) {
		fprintf(stderr, "read failed on number of segs\n");
		return -3;
	}
	if((nseg < 3) || (nseg > MAX_SEG)) {
		fprintf(stderr, "seg cnt %d not in range 3 .. %d\n", nseg, MAX_SEG);
		return -5;
	}
	maxseg = segsum = 0.0;
	maxind = -1;
	for(i = 0; i < nseg; i++) {
		if(scanf("%lf", &segs[i]) != 1) {
			fprintf(stderr, "read failed on segment %d\n", i+1);
			return -6;
		}
		if((segs[i] < MIN_SEG_SZ) || (segs[i] > MAX_SEG_SZ)) {
			fprintf(stderr, "segment %d value %0.4lf not in range %0.4lf .. %0.4lf\n",
				i+1, segs[i], MIN_SEG_SZ, MAX_SEG_SZ);
			return -7;
		}
		segsum += segs[i];
		if(maxseg < segs[i]){
			maxseg = segs[i];
			maxind = i;
		}
	}
	ret = FindRadius();
	if(ret == 0) {
		printf("%0.4lf\n", circ_radius);
	} else if(ret == -1){
		printf("NO CIRCLE\n");
	} else if(ret == -2){
		printf("OUTSIDE\n");
	} else if(ret == -3){
		printf("TOO BIG\n");
	} else {
		printf("ERROR\n");
	}
	return 0;
}

