#include <stdio.h>
#include <math.h>

#define EPS (1e-7)

typedef struct {
	double x,y,z;
} xyz_t;

typedef struct {
	int x,y,l;
} kui_t;

int n;
kui_t kui[10];

int is_valid(xyz_t b) {
	int i;
	if(b.z<0)return 0;
	for(i=0;i<n;i++) {
		if((b.x-kui[i].x)*(b.x-kui[i].x)+(b.y-kui[i].y)*(b.y-kui[i].y)+b.z*b.z>kui[i].l*kui[i].l+EPS)return 0;
	}
	return 1;
}

int hts_solve(double* x,double* y,int a,int b,int c,int d,int p,int q) {
	int delta=a*d-b*c;
	if(delta==0)return 0;
	*x=(double)(d*p-b*q)/delta;
	*y=(double)(-c*p+a*q)/delta;
	return 1;
}

xyz_t get_one(int id) {
	xyz_t result={kui[id].x,kui[id].y,kui[id].l};
	return result;
}

xyz_t get_two(int id1,int id2) {
	double a=sqrt((kui[id1].x-kui[id2].x)*(kui[id1].x-kui[id2].x)+(kui[id1].y-kui[id2].y)*(kui[id1].y-kui[id2].y));
	double x=(a*a-kui[id2].l*kui[id2].l+kui[id1].l*kui[id1].l)/(2.0*a);
	double h=sqrt(kui[id1].l*kui[id1].l-x*x);
	xyz_t result={kui[id1].x+(kui[id2].x-kui[id1].x)*x/a,kui[id1].y+(kui[id2].y-kui[id1].y)*x/a,h};
	return result;
}

xyz_t get_three(int id1,int id2,int id3) {
	kui_t k1=kui[id1];
	kui_t k2=kui[id2];
	kui_t k3=kui[id3];
	double x,y,zz;
	xyz_t err={0,0,-1};
	xyz_t result;
	if(!hts_solve(&x,&y,2*(k1.x-k2.x),2*(k1.y-k2.y),2*(k2.x-k3.x),2*(k2.y-k3.y),
			k2.l*k2.l-k1.l*k1.l-k2.x*k2.x+k1.x*k1.x-k2.y*k2.y+k1.y*k1.y,
			k3.l*k3.l-k2.l*k2.l-k3.x*k3.x+k2.x*k2.x-k3.y*k3.y+k2.y*k2.y)) {
		return err;
	}
	zz=k1.l*k1.l-k1.y*k1.y+2*y*k1.y-y*y-k1.x*k1.x+2*x*k1.x-x*x;
	if(zz<0)return err;
	result.x=x;result.y=y;result.z=sqrt(zz);
	return result;
}

int main(void) {
	while(scanf("%d",&n)==1 && n>0) {
		int i,j,k;
		for(i=0;i<n;i++)scanf("%d%d%d",&kui[i].x,&kui[i].y,&kui[i].l);
		double max_z=0;
		xyz_t now;
		/* one */
		for(i=0;i<n;i++) {
			now=get_one(i);
			if(is_valid(now) && now.z>max_z)max_z=now.z;
		}
		/* two */
		for(i=0;i<n;i++) {
			for(j=i+1;j<n;j++) {
				now=get_two(i,j);
				if(is_valid(now) && now.z>max_z)max_z=now.z;
			}
		}
		/* three */
		for(i=0;i<n;i++) {
			for(j=i+1;j<n;j++) {
				for(k=j+1;k<n;k++) {
					now=get_three(i,j,k);
					if(is_valid(now) && now.z>max_z)max_z=now.z;
				}
			}
		}
		printf("%.15f\n",max_z);
	}
	return 0;
}