#include <vector>
#include <algorithm>
#include <string>
#include <map>
#include <set>
#include <queue>
#include <cstring>
#include <deque>
#include <cstdio>
#include <cmath>
#include <complex>
#include <iostream>
#include <iterator>

using namespace std;

#define reep(i,f,t) for(int i=f ; i<int(t) ; ++i)
#define rep(i,n) reep(i, 0, n) 

typedef vector<int> vi;
typedef vector<vi> vvi;
typedef pair<int,int> pii;

typedef vector<double> vd;
typedef vector<vd> vvd;

const double EPS = 1e-8;
const double INF = 1e12;

// ½ÊãÌ_ExNg
typedef complex<double> P;
namespace std{
	bool operator< (const P& a, const P& b){
		return real(a) != real(b) ? real(a) < real(b) : imag(a) < imag(b);
	}
}

// OÏ
double cross(const P& a, const P& b){
	return imag(conj(a)*b);
}

// àÏ
double dot(const P& a, const P& b){
	return real(conj(a)*b);
}

// ¼ü
struct L : public vector<P> {
	L(const P &a, const P &b){
		push_back(a);
		push_back(b);
	}
};

// ½p`
typedef vector<P> G;

// ~
struct C{
	P p;
	double r;
	C(const P& p, double r) : p(p), r(r) {}
};

int ccw(P a, P b, P c)
{
	b -= a;
	c -= a;
	if(cross(b, c) > 0)   return +1; // ½vñè
	if(cross(b, c) < 0)   return -1; // vñè
	if(dot(b, c) < 0)     return +2; // c--a--b
	if(norm(b) < norm(c)) return -2; // a--b--c
	return 0;
}

// üªÆ_Ìð·»è
bool intersectSP(const L& s, const P& p){
	return abs(s[0]-p) + abs(s[1]-p) - abs(s[1]-s[0]) < EPS;
}

// ¼üãÌ_ÌËe
P projection(const L& l, const P& p){
	double t = dot(p-l[0], l[0]-l[1]) / norm(l[0]-l[1]);
	return l[0] + t*(l[0]-l[1]);
}

// üªÆ_Ì£
double distanceSP(const L& s, const P& p){
	const P r = projection(s, p);
	if(intersectSP(s, r)) return abs(r - p);
	return min(abs(s[0]-p), abs(s[1]-p));
}

char detect(const G& tri, const C& c)
{
	bool inner[3];
	rep(i, 3){
		inner[i] = abs(tri[i] - c.p) - EPS <= c.r;
	}
	if(inner[0] && inner[1] && inner[2])
		return 'b';
	if(inner[0] || inner[1] || inner[2])
		return 'c';
	
	rep(i, 3){
		L l(tri[i], tri[(i+1)%3]);
		if(distanceSP(l, c.p) + EPS < c.r)
			return 'c';
	}
	
	int v = 0;
	rep(i, 3){
		int now = ccw(tri[i], tri[(i+1)%3], c.p);
		if(now * v < 0)
			return 'd';
		v = now;
	}
	
	return 'a';
}

int main()
{
	for(;;){
		G tri(3);
		rep(i, 3){
			scanf("%lf%lf", &tri[i].real(), &tri[i].imag());
			if(tri[i].real() == 0.0)
				break;
		}
		if(fabs(tri[0].real()) < EPS)
			break;
		
		P p;
		double r;
		scanf("%lf%lf%lf", &p.real(), &p.imag(), &r);
		printf("%c\n", detect(tri, C(p, r)));
	}

	return 0;
}