#include<iostream>
#include<fstream>
#include<sstream>
#include<cstdio>
#include<vector>
#include<list>
#include<stack>
#include<queue>
#include<deque>
#include<map>
#include<set>
#include<algorithm>
#include<cmath>
#include<string>
#include<cstring>
#include<cstdlib>
#include<climits>
#include<utility>
#include<cctype>
using namespace std;

#define ull unsigned long long
#define stt(it,order) sort(it.begin(),it.end(),order)
#define STT(it,n,order) sort(it,it+n,order)
#define st(it) sort(it.begin(),it.end())
#define ST(it,n) sort(it,it+n)
#define ll long long
#define rep(i,j) for(int i=0;i<j;++i)
#define loop(i,a,j) for(int i=a;i<j;++i)
#define mpi(it,table,T,E) for(map<T,E>::iterator it = table.begin();it!=table.end();++it)
#define PI 3.141592654
#define pb(v,e) v.push_back(e)
#define ms(a,v) memset(a,v,sizeof(a))
#define cp(a,b,n) rep(i,n)a[i] = b[i]
#define pi(a) printf("%d\n",a)
#define ps(a) printf("%s\n",a)
#define si(a) scanf("%d",&a)
#define print_int_matrix(mat,n) rep(i,n-1){printf("%d ",mat[i]);}printf("%d\n",mat[n-1]);
#define print_string_matrix(mat,n) rep(i,n-1){printf("%s ",mat[i]);}printf("%s\n",mat[n-1]);
#define mkp(a,b) make_pair(a,b)
#define fnd(table,e) (find(table.begin(),table.end(),e) != table.end())

//TYPOS DE DATOS PERSONALES
typedef unsigned int _set;
typedef unsigned long _lset;
typedef pair<int,int> pii;

string sint(int i){
   stringstream buf;
   buf<<i;
   return buf.str();
}

/*
ifstream fin("input.txt");
ofstream fout("output.txt");
#define cin fin
#define cout fout
*/

int dx[] = {-1,0,0,1};
int dy[] = {0,-1,1,0};
int dx8[] = {-1,-1,-1,0,0,1,1,1};
int dy8[] = {-1,0,1,-1,1,-1,0,1};

#define EPS (1e-10)

inline int cmp(const double& x, const double& y = 0, double tol = EPS){
     return (x <= y + tol) ? (x + tol < y) ? -1 : 0 : 1;
}

double dis(pii vex,int a,int b){
   return sqrt( pow(vex.first-a,2) + pow(vex.second - b,2));
}

double dis(double x,double y,double u,double v){
   return sqrt( pow(x-u,2) + pow(y-v,2));
}

bool insd(double x,double a,double b){
   return min(a,b) <= x && x <= max(a,b);
}

bool inter(pii Pa, pii Pb, int x,int y,int r){

   int A = Pb.second - Pa.second;
   int B = Pa.first - Pb.first;
   int C = A*Pa.first + B*Pa.second;

   if( B == 0)return false;

   double neta = 2*A*B*y - 2*A*C - 2*B*B*x;
   double theta = B*B + A*A;
   double betha = B*B*x*x - r*r*B*B + y*y*B*B + C*C - 2*B*C*y;

   return neta*neta >= 4*theta*betha ;
}

bool perp(pii Pa,pii Pb,int x,int y,int r){
   int A = Pb.second - Pa.second;
   int B = Pa.first - Pb.first;
   int C = A*Pa.first + B*Pa.second;

   int D = -B;
   int E = A;
   int F = D*x + E*y;

   double det = A*E - B*D;
   double sx = (C*E-B*F)/det;
   double sy = (A*F-D*C)/det;

   return insd(sx,Pa.first,Pb.first) && insd(sy,Pa.second,Pb.second);

}

int main(){
   int a,b;
   while( scanf("%d %d",&a,&b) != EOF , a || b ){
      vector<pii> tri;
      pb(tri,mkp(a,b));

      scanf("%d %d",&a,&b);
      pb(tri,mkp(a,b));

      scanf("%d %d",&a,&b);
      pb(tri,mkp(a,b));

      scanf("%d %d",&a,&b);
      int r;
      si(r);

      int t = 0;

      rep(i,3){
         double d = dis(tri[i],a,b);
         if( cmp(d,r) <= 0){
            t++;
         }

      }

      if( t == 3){
         printf("b\n");
      }else{
         bool find = false;
         rep(i,3){
            find = find || inter(tri[i],tri[(i+1)%3],a,b,r);
         }
         if( find ){
            printf("c\n");
         }else{
            find = true;
            rep(i,3){
               find = find && perp(tri[i],tri[(i+1)%3],a,b,r);
            }

            if( find){
               printf("a\n");
            }else{
               printf("d\n");
            }

         }
      }

   }
   return 0;
}