#include <iostream>
#include <cmath>
#include <algorithm>
#include <complex>
#include <vector>
using namespace std;
typedef long double Double;
typedef complex<Double> P;
#define Y imag()
#define X real()
const Double EPS = (long double) 1 * 1e-12;

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

Double get(P a[3]){
	Double A = abs(a[0]-a[1]);
	Double B = abs(a[1]-a[2]);
	Double C = abs(a[2]-a[0]);
	Double s = (A+B+C) / 2.0;
	Double S = sqrt( s * (s-A) * (s-B) * (s-C) );
	return S;
}
Double nijo(P a){
	return a.X * a.X + a.Y * a.Y;
}
 
Double dot(const P& a, const P& b) {return real(conj(a)*b);}
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 getPedal(const L &l, const P &p) {
	return abs(p - projection(l, p));
}

int main(){
	P a[3],c;Double r;
	while(cin >> a[0].X >> a[0].Y && (a[0].X != 0 || a[0].Y != 0)){
		for(int i = 1 ; i < 3 ; i++) cin >> a[i].X >> a[i].Y;
		cin >> c.X >> c.Y >> r;
		Double S = get(a);
		for(int i = 0 ; i < 3 ; i++){
			P b[3];
			b[0] = a[i];
			b[1] = a[(i+1)%3];
			b[2] = c;
			S -= get(b);
		}
		bool in = abs(S) < EPS;
		bool hit = getPedal(L(a[0],a[1]),c) <= r || getPedal(L(a[1],a[2]),c) <= r || getPedal(L(a[0],a[2]),c) <= r;
		//cout << getPedal(L(a[0],a[1]),c) << " " << r << endl;
		if(  nijo(a[0]-c) < r*r && nijo(a[1]-c) < r*r && nijo(a[2]-c) < r*r) cout << "b" << endl;
		else if(in && !hit) cout << "a" << endl;
		else if(hit) cout << "c" << endl;
		else cout << "d" << endl;
	}
}