#include<stdio.h>
#include<algorithm>
#include<math.h>
#include<vector>
using namespace std;
const double EPS = 1e-10;
const double INF = 1e+10;
const double PI = acos(-1);
int sig(double r) { return (r < -EPS) ? -1 : (r > +EPS) ? +1 : 0; }
inline double ABS(double a){return max(a,-a);}
struct Pt {
	double x, y;
	Pt() {}
	Pt(double x, double y) : x(x), y(y) {}
	Pt operator+(const Pt &a) const { return Pt(x + a.x, y + a.y); }
	Pt operator-(const Pt &a) const { return Pt(x - a.x, y - a.y); }
	Pt operator*(const Pt &a) const { return Pt(x * a.x - y * a.y, x * a.y + y * a.x); }
	Pt operator-() const { return Pt(-x, -y); }
	Pt operator*(const double &k) const { return Pt(x * k, y * k); }
	Pt operator/(const double &k) const { return Pt(x / k, y / k); }
	double ABS() const { return sqrt(x * x + y * y); }
	double abs2() const { return x * x + y * y; }
	double arg() const { return atan2(y, x); }
	double dot(const Pt &a) const { return x * a.x + y * a.y; }
	double det(const Pt &a) const { return x * a.y - y * a.x; }
};
double tri(const Pt &a, const Pt &b, const Pt &c) { return (b - a).det(c - a); }
int iSP(Pt a, Pt b, Pt c) {
	int s = sig((b - a).det(c - a));
	if (s) return s;
	if (sig((b - a).dot(c - a)) < 0) return -2; // c-a-b
	if (sig((a - b).dot(c - b)) < 0) return +2; // a-b-c
	return 0;
}
int iLL(Pt a, Pt b, Pt c, Pt d) {
	if (sig((b - a).det(d - c))) return 1; // intersect
	if (sig((b - a).det(c - a))) return 0; // parallel
	return -1; // correspond
}
double dSP(Pt a, Pt b, Pt c) {
	if (sig((b - a).dot(c - a)) <= 0) return (c - a).ABS();
	if (sig((a - b).dot(c - b)) <= 0) return (c - b).ABS();
	return ABS(tri(a, b, c)) / (b - a).ABS();
}

bool iLS(Pt a, Pt b, Pt c, Pt d) {
	return (sig(tri(a, b, c)) * sig(tri(a, b, d)) <= 0);
}
bool iSS(Pt a, Pt b, Pt c, Pt d) {
	return (iSP(a, b, c) * iSP(a, b, d) <= 0 && iSP(c, d, a) * iSP(c, d, b) <= 0);
}
bool iSSstrict(Pt a, Pt b, Pt c, Pt d) {
	return (sig(tri(a, b, c)) * sig(tri(a, b, d)) < 0 && sig(tri(c, d, a)) * sig(tri(c, d, b)) < 0);
}
Pt pLL(Pt a, Pt b, Pt c, Pt d) {
	b = b - a; d = d - c; return a + b * (c - a).det(d) / b.det(d);
}
bool iCS(Pt a, double r, Pt b, Pt c) {
	return (sig(r - dSP(b, c, a)) >= 0 && sig(r - max((b - a).ABS(), (c - a).ABS())) <= 0);
}
pair<Pt,Pt> pCC(Pt a, double r, Pt b, double s) {
	double d = (b - a).ABS();
	double x = (d * d + r * r - s * s) / (d * 2);
	Pt e = (b - a) / d, w = e * Pt(0, 1) * sqrt(max(r * r - x * x, 0.0));
	return make_pair(a + e * x - w, a + e * x + w);
}
pair<Pt,Pt> pCL(Pt a, double r, Pt b, Pt c) {
	Pt h = b + (c - b) * (c - b).dot(a - b) / (c - b).abs2(); // perp(b, c, a)
	double d = (h - a).ABS();
	double y = sqrt(max(r * r - d * d, 0.0));
	Pt e = (c - b) / (c - b).ABS();
	return make_pair(h - e * y, h + e * y);
}

int sGP(int n, Pt p[], Pt a) {
	int side = -1, i;
	p[n] = p[0];
	for (i = 0; i < n; ++i) {
		Pt p0 = p[i] - a, p1 = p[i + 1] - a;
		if (sig(p0.det(p1)) == 0 && sig(p0.dot(p1)) <= 0) return 0;
		if (p0.y > p1.y) swap(p0, p1);
		if (sig(p0.y) <= 0 && 0 < sig(p1.y) && sig(p0.det(p1)) > 0) side = -side;
	}
	return side;
}
int sAP(Pt a, Pt b, Pt c) {
	return sig(a.det(c)) - sig(b.det(c)) - sig(a.det(b));
}
char in[10];
Pt p[210];
int isl[210];
int main(){
	while(1){
		int sz=0;
		scanf("%s",in);
		if(in[0]=='e')break;
		for(int i=0;i<210;i++)isl[i]=0;
		double X,Y;
		scanf("%lf%lf",&X,&Y);
		p[sz++]=Pt(X,Y);
		vector<pair<Pt,int> > left;
		vector<pair<Pt,int> > right;
		while(1){
			scanf("%s",in);
			if(in[0]=='c'){
				if((p[0]-p[sz-1]).ABS()<EPS){sz--;break;}
				isl[sz-1]=1;
				p[sz]=p[0];break;
			}
			if(in[0]=='l'){
				scanf("%lf%lf",&X,&Y);
				isl[sz-1]=1;
				p[sz++]=Pt(X,Y);
			}
			if(in[0]=='a'){
				double r;
				scanf("%lf%lf%lf",&X,&Y,&r);
				p[sz++]=Pt(X,Y);
				Pt M=(p[sz-1]+p[sz-2])/2;
				double dist=(p[sz-1]-p[sz-2]).ABS()/2;
				double h=sqrt(r*r-dist*dist);
				if(r<0){
					Pt v=(p[sz-1]-p[sz-2])*Pt(0,1);
					v=v/v.ABS()*h;
					left.push_back(make_pair(M+v,sz-2));
				}else{
					Pt v=(p[sz-1]-p[sz-2])*Pt(0,-1);
					v=v/v.ABS()*h;
					right.push_back(make_pair(M+v,sz-2));
				}
			}
		}
		double S=0;
		Pt G=Pt(0,0);
		for(int i=0;i<sz;i++){
			double det=p[i].det(p[i+1])/2;
			S+=det;
			G=G+(p[i]+p[i+1])/3*det;
		}
		for(int i=0;i<left.size();i++){
			Pt c=left[i].first;
			int at=left[i].second;
			double r=(p[at]-c).ABS();
			double th=asin(((p[at+1]-p[at]).ABS()/2)/r)*2;
			double A=r*r*(th-sin(th))/2;
			double y=2*r*r*r*sin(th/2)*sin(th/2)*sin(th/2)/A/3;
			Pt v=(p[at+1]+p[at])/2-c;
			v=v/v.ABS()*y;
			v=v+c;
			S+=A;
			G=G+v*A;
		}
		for(int i=0;i<right.size();i++){
			Pt c=right[i].first;
			int at=right[i].second;
			double r=(p[at]-c).ABS();
			double th=asin(((p[at+1]-p[at]).ABS()/2)/r)*2;
			double A=r*r*(th-sin(th))/2;
			double y=2*r*r*r*sin(th/2)*sin(th/2)*sin(th/2)/A/3;
			Pt v=(p[at+1]+p[at])/2-c;
			v=v/v.ABS()*y;
			v=v+c;
			S-=A;
			G=G-v*A;
		}
		G=G/S;
		//printf("%f ",S);
		printf("%f %f ",G.x,G.y);
		Pt os=Pt(114,514);
		bool ok=false;
		for(int i=0;i<sz;i++){
			if(isl[i]){
				if(iSS(p[i],p[i+1],os,G)){
				//	printf("line %d\n",i);
					ok=!ok;
				}
			}
		}
		for(int i=0;i<left.size();i++){
			Pt v1=p[left[i].second]-left[i].first;
			Pt v2=p[left[i].second+1]-left[i].first;
			if(v1.det(v2)>EPS)swap(v1,v2);
			double r=v1.ABS();
			if(iCS(left[i].first,r,os,G)){
				pair<Pt,Pt>hb=pCL(left[i].first,r,os,G);
				//printf("left %d\n",i);
				if(iSP(os,hb.first,G)==2&&sAP(v1,hb.first-left[i].first,v2)==1){ok=!ok;}
				if(iSP(os,hb.second,G)==2&&sAP(v1,hb.second-left[i].first,v2)==1){ok=!ok;}
			}
		}
		for(int i=0;i<right.size();i++){
			Pt v1=p[right[i].second]-right[i].first;
			Pt v2=p[right[i].second+1]-right[i].first;
			if(v1.det(v2)>EPS)swap(v1,v2);
			double r=v1.ABS();
			if(iCS(right[i].first,r,os,G)){
				pair<Pt,Pt>hb=pCL(right[i].first,r,os,G);
				if(iSP(os,hb.first,G)==2&&sAP(v1,hb.first-right[i].first,v2)==1){ok=!ok;}
				if(iSP(os,hb.second,G)==2&&sAP(v1,hb.second-right[i].first,v2)==1){ok=!ok;}
			}
		}
		if(ok)printf("+\n");
		else printf("-\n");
	}
}

Measured memory_bytes: 1164