#include<iostream>
#include<vector>
#include<complex>
#include<algorithm>
#include<set>
#define rep(i,n) for(int i = 0;i < n ; ++i)

using namespace std;

using ll = long long;
using Point = complex<double>;
const double eps = 1e-7;

double dot(Point a, Point b){
    return real(conj(a)*b);
}

double cross(Point a, Point b){
    return imag(conj(a)*b);
}


struct Line{
    Point a,b;
};

bool isis_sp(Line s, Point p){
    return (abs(s.a-p)+abs(s.b-p)-abs(s.b-s.a)<eps);
}

Point proj(Line l, Point p){
    double t = dot(p-l.a,l.a-l.b)/norm(l.a-l.b);
    return l.a + t * (l.a-l.b);
}

double dist_sp(Line s, Point p){
    Point r = proj(s,p);
    return isis_sp(s,r) ? abs(p-r) : min(abs(p-s.a),abs(p-s.b));
}

bool solve(){
    Point p[3];
    rep(i,3){
        int x,y;
        cin>>x>>y;
        if(x==0&&y==0)return false;
        p[i]=Point(x,y);
    }
    Point c;
    int x,y;
    cin>>x>>y;
    c = Point(x,y);
    double r; cin>>r;
    int f = 0;
    rep(i,3)if(abs(p[i]-c)>=r+eps)++f;
    if(f==0){
        cout<<"b"<<endl;
        return true;
    }
    if(f<3){
        cout<<"c"<<endl;
        return true;
    }
    double sum = 0;
    rep(i,3){
        sum += arg((p[(i+1)%3]-c)/(p[i]-c));
    }
    bool in = (abs(sum)>3);
    if(in){
        bool cr = false;
        rep(i,3){
            Line l = Line{p[i],p[(i+1)%3]};
            if(dist_sp(l,c)<r-eps)cr = true;
        }
        if(cr)cout<<"c"<<endl;
        else cout<<"a"<<endl;
    }
    else {
        bool cr = false;
        rep(i,3){
            Line l = Line{p[i],p[(i+1)%3]};
            if(dist_sp(l,c)<r+eps)cr = true;
        }
        if(cr)cout<<"c"<<endl;
        else cout<<"d"<<endl;
    }
    return true;
}

int main(){
     while(solve());
}
