#include<iostream>
#include<cmath>
#include<algorithm>
#include<vector>
using namespace std;
struct Point { long double px, py; };
struct Line { Point p1, p2; };
Point Minus(const Point& a, const Point& b) { return Point{ a.px - b.px,a.py - b.py }; }
long double norm(const Point& a) { return a.px * a.px + a.py * a.py; }
long double abs(const Point& a) { return sqrtl(norm(a)); }
long double dot(const Point& a, const Point& b) { return a.px * b.px + a.py * b.py; }
long double crs(const Point& a, const Point& b) { return a.px * b.py - a.py * b.px; }
long double dst(const Point& a, const Point& b) { return abs(Minus(b , a)); }
long double dst(const Line& a, const Point& b) {
	long double E = dot(Minus(a.p2, a.p1), Minus(b, a.p1));
	long double F = dot(Minus(a.p1, a.p2), Minus(b, a.p2));
	if (E < -1e-7)return abs(Minus(b, a.p1));
	if (F < -1e-7)return abs(Minus(b, a.p2));
	return abs(crs(Minus(a.p2, a.p1), Minus(b, a.p1)) / abs(Minus(a.p2, a.p1)));
}
int contain(vector<Point> v, Point p) {
	bool in = false;
	for (int i = 0; i < v.size(); ++i) {
		Point a = Minus(v[i], p), b = Minus(v[(i + 1) % v.size()], p);
		if (a.py > b.py) swap(a, b);
		if (a.py <= 1e-7 && 1e-7 < b.py)
			if (crs(a, b) < -1e-7) in = !in;
		if (fabs(crs(a, b)) <= 1e-7 && dot(a, b) <= 1e-7) return 1;
	}
	return in ? 2 : 0;
}
int main() {
	while (true) {
		Point r1, r2, r3, r4; long double r;
		cin >> r1.px >> r1.py; if (fabs(r1.px) <= 1e-7 && fabs(r1.py) <= 1e-7)break;
		cin >> r2.px >> r2.py >> r3.px >> r3.py >> r4.px >> r4.py >> r;
		Line l1 = Line{ r1,r2 }, l2 = { r2,r3 }, l3 = { r3,r1 };
		long double c1 = min(dst(l1, r4), min(dst(l2, r4), dst(l3, r4)));
		long double c2 = max(dst(r1, r4), max(dst(r2, r4), dst(r3, r4)));
		//cout << dst(l1, r4) << ' ' << dst(l2, r4) << ' ' << dst(l3, r4) << endl;
		int c4 = contain({ r1,r2,r3 }, r4);
		if (c1 >= r - 1e-7 && c4 != 0) { cout << "a" << endl; }
		else if (c2 <= r + 1e-7) { cout << "b" << endl; }
		else if (c1 <= r + 1e-7) { cout << "c" << endl; }
		else { cout << "d" << endl; }
	}
	return 0;
}