#include <iostream>
#include <complex>
using namespace std;

#define EPS (1e-10)

typedef complex<double> P;

double cross(P a, P b){
	return (a.real() * b.imag() - a.imag() * b.real());
}

double distance_l_p(P a, P b, P c){
	return abs(cross(b-a, c-a)) / abs(b-a);
}

int is_intersected_ls(P a1, P a2, P b1, P b2){
	return (cross(a2-a1, b1-a1) * cross(a2-a1, b2-a1) < EPS) &&
		(cross(b2-b1, a1-b1) * cross(b2-b1, a2-b1) < EPS);
}

int point_in_polygon(int n, P p[], P q){
	int i,flg;
	P o = P(0,0);

	for(i=0;i<n;o+=p[i],i++);
	o /= n;
	flg = is_intersected_ls(p[n-1],p[0],q,o);
	for(i=0;i<n-1;i++){
		flg = flg || is_intersected_ls(p[i],p[i+1],q,o);
	}
	return !flg;
}

int main(void){
	int i,flg1,flg2;
	double r;
	P p[3],o;

	while(1){
		for(i=0;i<3;i++){
			cin>>p[i].real()>>p[i].imag();
			if(!p[i].real() && !p[i].imag()) return 0;
		}
		cin>>o.real()>>o.imag()>>r;

		flg1 = distance_l_p(p[0],p[1],o) > r;
		flg1 += distance_l_p(p[1],p[2],o) > r;
		flg1 += distance_l_p(p[2],p[0],o) > r;

		flg2 = abs(p[0]-o) < r;
		flg2 += abs(p[1]-o) < r;
		flg2 += abs(p[2]-o) < r;

		if(flg1==3){
			if(point_in_polygon(3,p,o)) cout<<"a\n";
			else if(!flg2) cout<<"d\n";
		}
		else if(flg2==3) cout<<"b\n";
		else cout<<"c\n";
	}
}