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

class Vector2
{
public:
	double length() const
	{
		return sqrt( static_cast<double>( x * x + y * y ) );
	}
	int clossProduct( const Vector2& v ) const
	{
		return this->x * v.y - this->y * v.x;
	}
	Vector2 operator-( const Vector2& v ) const
	{
		Vector2 ret;
		ret.x = this->x - v.x;
		ret.y = this->y - v.y;
		return ret;
	}

	int x, y;
};

int main()
{
	Vector2 tri[ 3 ];
	Vector2 cir;
	int cirR;

	while( cin >> tri[ 0 ].x >> tri[ 0 ].y && !( !tri[ 0 ].x && !tri[ 0 ].y ) ){
		for( int i = 1; i < 3; ++i ){
			cin >> tri[ i ].x >> tri[ i ].y;
		}
		cin >> cir.x >> cir.y;
		cin >> cirR;

		int flags = 0;
		for( int i = 0; i < 3; ++i ){
			Vector2 ao = cir - tri[ i ];
			Vector2 ab = tri[ ( i + 1 ) % 3 ] - tri[ i ];
			double distance = abs( ab.clossProduct( ao ) ) / ab.length();
			if( distance >= cirR ){
				flags |= ( 1 << i );
			}
		}

		char result;
		if( flags == 7 ){
			int dir = 0;
			for( int i = 0; i < 3; ++i ){
				Vector2 oa = tri[ i ] - cir;
				Vector2 ob = tri[ ( i + 1 ) % 3 ] - cir;
				if( oa.x * ob.y > oa.y * ob.x ){
					dir |= ( 1 << i );
				}
			}
			if( dir % 7 == 0 ){
				result = 'a';
			}else{
				result = 'd';
			}
		}else if( flags == 0 ){
			int dir = 0;
			for( int i = 0; i < 3; ++i ){
				Vector2 oa = tri[ i ] - cir;
				if( oa.length() <= cirR ){
					dir |= ( 1 << i );
				}
			}
			if( dir == 7 ){
				result = 'b';
			}else{
				return 'c';
			}
		}else{
			result = 'c';
		}

		cout << result << endl;
	}

	return 0;
}