#include <iostream>
#include <sstream>
#include <string>
#include <algorithm>
#include <vector>
#include <stack>
#include <queue>
#include <complex>
#include <set>
#include <map>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <cassert>

using namespace std;

#define FOR(i,k,n) for(int i=(k); i<(int)(n); ++i)
#define REP(i,n) FOR(i,0,n)
#define FORIT(i,c) for(__typeof((c).begin())i=(c).begin();i!=(c).end();++i)

template<class T> void debug(T begin, T end){ for(T i = begin; i != end; ++i) cerr<<*i<<" "; cerr<<endl; }
inline bool valid(int x, int y, int W, int H){ return (x >= 0 && y >= 0 && x < W && y < H); }

typedef long long ll;
const int INF = 100000000;
const double EPS = 1e-8;
const int MOD = 1000000007;
int dx[8] = {1, 0, -1, 0, 1, -1, -1, 1};
int dy[8] = {0, 1, 0, -1, 1, 1, -1, -1};

typedef complex<double> P;
typedef pair<P, P> L;
#define X real()
#define Y imag()

double dot(P& a, P& b){
  return a.X * b.X + a.Y * b.Y;
}
double cross(P& a, P& b){
  return a.X * b.Y - a.Y * b.X;
}

int sign(double x){
  if(x > EPS) return 1;
  if(x < -EPS) return -1;
  return 0;
}

//a -> b, a -> c
int ccw(P a, P b, P c){
  b -= a; c -= a;
  if(sign(cross(b, c)) > 0) return 1; //反時計
  if(sign(cross(b, c)) < 0) return -1; //時計
  if(sign(dot(b, c)) < 0) return +2; //c-a-b
  if(norm(b) < norm(c)) return -2; //a-b-c
  return 0; //a-c-b
}

double min_d(P a, P b, P c){
  double d1 = abs(c - a);
  double d2 = abs(c - b);
  b -= a; c -= a;
  double k = dot(b, c) / norm(b);
  if(0 < k && k < 1) return abs(c - k * b);
  else return min(d1, d2);
}

string solve(P p[3], P c, double r){
  if(ccw(p[0], p[1], p[2]) == -1) swap(p[1], p[2]);
  double maxdist = 0, mindist = 1e18;
  int ccw_v[3];
  REP(i, 3){
    maxdist = max(maxdist, abs(p[i] - c));
    mindist = min(mindist, min_d(p[i], p[(i + 1) % 3], c));
    ccw_v[i] = ccw(p[i], p[(i + 1) % 3], c);
  }
  if(sign(maxdist - r) <= 0) return "b";
  if(ccw_v[0] == ccw_v[1] && ccw_v[1] == ccw_v[2] && ccw_v[0] == 1){
    if(sign(mindist - r) >= 0) return "a";
    else return "c";
  }else{
    if(sign(mindist - r) > 0) return "d";
    else return "c";
  }
}

int main(){
  P p[3];
  P c; double r;
  while(cin>>p[0].X>>p[0].Y>>p[1].X>>p[1].Y>>p[2].X>>p[2].Y>>c.X>>c.Y>>r){
    cout<<solve(p, c, r)<<endl;
  }
  return 0;
}