#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <climits>
#include <cfloat>
#include <map>
#include <utility>
#include <set>
#include <iostream>
#include <memory>
#include <string>
#include <vector>
#include <algorithm>
#include <functional>
#include <sstream>
#include <complex>
#include <stack>
#include <queue>
typedef long long ll;
using namespace std;

struct Pos{
	double x,y;
	Pos(double x,double y) : x(x) , y(y) {}
	Pos(){}
};

struct Triangle{
	Pos pos[3];
};
struct Circle{
	Pos pos;
	double r;
};

static const double kyuriEPS = 1e-9;
typedef std::complex<double> myPoint;
double dot(const myPoint& a, const myPoint& b) {return real(conj(a)*b);}
struct myL : public std::vector<myPoint> {
	myL(const myPoint &a, const myPoint &b) {push_back(a); push_back(b);}
};

bool intersectSP(const myL &s, const myPoint &p) {
	return abs(s[0]-p)+abs(s[1]-p)-abs(s[1]-s[0]) < kyuriEPS;
} 
myPoint projection(const myL &l, const myPoint &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 myL &s, const myPoint &p) {
	const myPoint r = projection(s, p);
	if (intersectSP(s, r)) return abs(r - p);
	return std::min(abs(s[0] - p), abs(s[1] - p));
}
//ct
int judgeHit(const Circle &c,const Triangle &t){
	int counter = 0 , ctt = 0;
	for(int i = 0 ; i < 3 ; i++){
		if( abs(myPoint(c.pos.x,c.pos.y)-myPoint(t.pos[i].x,t.pos[i].y)) <= c.r ){
			ctt++;
		}
	}
	if( ctt == 3 ) return 1;
	for(int i = 0 ; i < 3 ; i++){
		double dist = distanceSP(myL(myPoint(t.pos[i].x,t.pos[i].y),myPoint(t.pos[(i+1)%3].x,t.pos[(i+1)%3].y)),myPoint(c.pos.x,c.pos.y));
		if( dist <= c.r ){
			counter++;
		}
	}
	if( counter >= 1 ) return 2;
	
	double tS2 = fabs( (t.pos[1].x-t.pos[0].x)*(t.pos[2].y-t.pos[0].y) - (t.pos[1].y-t.pos[0].y)*(t.pos[2].x-t.pos[0].x) );
	
	// a.pos[i] on B
	double area = 0;
	for(int j = 0 ; j < 3 ; j++){
		area += fabs((t.pos[j].x-c.pos.x)*(t.pos[(j+1)%3].y-c.pos.y) - (t.pos[j].y-c.pos.y)*(t.pos[(j+1)%3].x-c.pos.x));
	}
	if( fabs( fabs(area) - tS2 ) < kyuriEPS ) return 0;  
	else return 3;
}

int main(){
	Triangle t;
	Circle c;
	while(cin >> t.pos[0].x >> t.pos[0].y && (t.pos[0].x||t.pos[0].y)){
		for(int i = 1 ; i < 3 ; i++)
			cin >> t.pos[i].x >> t.pos[i].y;
		cin >> c.pos.x >> c.pos.y >> c.r;
		cout << (char)('a'+judgeHit(c,t)) << endl;
	}
}