#include <cmath>
#include <iostream>
#include <vector>
#include <complex>
#include <utility>
#include <cstdio>
using namespace std;
using D = double;
using P = complex<D>;
using L = pair<P,P>;
using Poly = vector<P>;

const D EPS = 1e-8;

#define X real()
#define Y imag()

D dot(const P &A, const P &B){ return A.X*B.X + A.Y*B.Y; }
D cross(const P &A, const P &B){ return A.X*B.Y - A.Y*B.X; }

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

D ps_dist(P a, L s){
  P sf = s.first, ss = s.second;
  if(dot(ss-sf,a-sf) >= 0 and dot(sf-ss,a-ss) >= 0)
    return abs(cross(sf-ss,a-ss))/abs(sf-ss);
  return min(abs(a-sf),abs(a-ss));
}


int in_poly(P a, const Poly &p){
  int n = p.size(), c = 0;
  for(int i = 0; i< n; ++i){
    P s = p[i] -a, t = p[(i+1)%n] - a;
    if(!ccw(s,t,P(0,0))) return 1;
    if(s.Y > t.Y+EPS) swap(s,t);
    if((s.Y*t.Y < 0 || (s.Y*t.Y < EPS && t.Y > EPS)) && cross(s,t) < EPS) ++c;
  }
  if (c%2) return 2;
  return 0;
}


int main(){
  int x, y;
  while(cin >> x >> y){
    if(x == 0 and y == 0) break;
    vector<P> V;
    V.emplace_back(x,y);
    for(int i =0 ; i < 2; ++i){
      cin >> x >> y;
      V.emplace_back(x,y);
    }
    cin >> x >> y;
    P c(x,y);
    D r;
    cin >> r;
    int a = 0, b = 0, e = 0;
    for(int i = 0; i < 3; ++i){
      if(abs(c-V[i]) < r + EPS) ++a;
      if(ps_dist(c,L(V[i],V[(i+1)%3])) < r + EPS) ++b;
      if(ps_dist(c,L(V[i],V[(i+1)%3])) < r - EPS) ++e;
    }
    if(a == 3){
      puts("b");
      continue;
    }
    int k = in_poly(c,V);
    if(!k){
      if(a > 0 or b > 0) puts("c");
      else puts("d");
      continue;
    }
    if(a > 0 or e > 0) puts("c");
    else puts("a");
  }
}

