using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            StringBuilder sb = new StringBuilder();

            while (true)
            {
                double[] input = Array.ConvertAll(Console.ReadLine().Split(' '), double.Parse);

                if (input.All(n => n == 0)) break;

                Point a = new Point(input[0], input[1]);
                input = Array.ConvertAll(Console.ReadLine().Split(' '), double.Parse);
                Point b = new Point(input[0], input[1]);
                input = Array.ConvertAll(Console.ReadLine().Split(' '), double.Parse);
                Point c = new Point(input[0], input[1]);
                input = Array.ConvertAll(Console.ReadLine().Split(' '), double.Parse);
                Point p = new Point(input[0], input[1]);
                double r = double.Parse(Console.ReadLine());

                double pa = (a - p).Abs;
                double pb = (b - p).Abs;
                double pc = (c - p).Abs;

                if (pa <= r && pb <= r && pc <= r)
                {
                    sb.AppendLine("b");
                }
                else
                {
                    if (IsPInside(a, b, c, p))
                    {
                        sb.AppendLine(CheckPIn(a, b, c, p, r));
                    }
                    else
                    {
                        sb.AppendLine(CheckPOut(a, b, c, p, r));
                    }
                }
            }
            Console.Write(sb);
        }

        static bool IsPInside(Point a, Point b, Point c, Point p)
        {
            double c1 = (b - a).Cross(p - b);
            double c2 = (c - b).Cross(p - c);
            double c3 = (a - c).Cross(p - a);

            if (c1 > 0 && c2 > 0 && c3 > 0) return true;
            if (c1 < 0 && c2 < 0 && c3 < 0) return true;
            return false;
        }

        static string CheckPIn(Point a, Point b, Point c, Point p, double r)
        {
            double sp1 = GetDistSP(a, b, p);
            double sp2 = GetDistSP(b, c, p);
            double sp3 = GetDistSP(c, a, p);

            if (sp1 >= r && sp2 >= r && sp3 >= r) return "a";
            return "c";
        }

        static string CheckPOut(Point a, Point b, Point c, Point p, double r)
        {
            double sp1 = GetDistSP(a, b, p);
            double sp2 = GetDistSP(b, c, p);
            double sp3 = GetDistSP(c, a, p);

            if (sp1 > r && sp2 > r && sp3 > r) return "d";
            return "c";
        }

        static double GetDistSP(Point a, Point b, Point p)
        {
            if ((b - a).Dot(p - a) < 0.0) return (p - a).Abs;
            if ((a - b).Dot(p - b) < 0.0) return (p - b).Abs;
            return GetDistLP(a, b, p);
        }

        static double GetDistLP(Point a, Point b, Point p)
        {
            return Math.Abs((b - a).Cross(p - a) / (b - a).Abs);
        }
    }

    struct Point : IComparable
    {
        static readonly double EPS = 1E-10;

        internal double x, y;

        public Point(double x, double y)
        {
            this.x = x;
            this.y = y;
        }

        public double Abs { get { return Math.Sqrt(Norm); } }
        public double Norm { get { return x * x + y * y; } }

        public double Dot(Point p) { return x * p.x + y * p.y; }
        public double Cross(Point p) { return x * p.y - y * p.x; }
        public double Distance(Point p) { return (this - p).Abs; }

        public static Point operator +(Point a, Point b) { return new Point(a.x + b.x, a.y + b.y); }
        public static Point operator -(Point a, Point b) { return new Point(a.x - b.x, a.y - b.y); }
        public static Point operator *(Point p, double d) { return new Point(p.x * d, p.y * d); }
        public static Point operator *(Point a, Point b) { return new Point(a.x * b.x - a.y * b.y, a.x * b.y + a.y * b.x); }
        public static Point operator /(Point p, double d) { return new Point(p.x / d, p.y / d); }
        public static bool operator <(Point a, Point b) { return Math.Abs(a.x - b.x) > EPS ? a.x < b.x : a.y < b.y; }
        public static bool operator >(Point a, Point b) { return Math.Abs(a.x - b.x) > EPS ? a.x > b.x : a.y > b.y; }
        public static bool operator ==(Point a, Point b) { return Math.Abs(a.x - b.x) < EPS && Math.Abs(a.y - b.y) < EPS; }
        public static bool operator !=(Point a, Point b) { return Math.Abs(a.x - b.x) >= EPS || Math.Abs(a.y - b.y) >= EPS; }

        public int CompareTo(object obj)
        {
            var other = (Point)obj;
            if (obj == null) return -1;

            ComparerX compX = new ComparerX();
            return compX.Compare(this, other);
        }

        public override bool Equals(object obj)
        {
            var other = (Point)obj;
            return Math.Abs(x - other.x) < EPS && Math.Abs(y - other.y) < EPS;
        }

        public override int GetHashCode()
        {
            return x.GetHashCode() ^ y.GetHashCode();
        }

        public override string ToString()
        {
            return string.Format("{0:f10} {1:f10}", x, y);
        }
    }

    class ComparerX : IComparer<Point>
    {
        static readonly double EPS = 1E-10;

        public int Compare(Point a, Point b)
        {
            if (a.x - b.x < -EPS) return -1;
            if (a.x - b.x > EPS) return 1;
            if (a.y - b.y < -EPS) return -1;
            if (a.y - b.y > EPS) return 1;
            return 0;
        }
    }

    class ComparerY : IComparer<Point>
    {
        static readonly double EPS = 1E-10;

        public int Compare(Point a, Point b)
        {
            if (a.y - b.y < -EPS) return -1;
            if (a.y - b.y > EPS) return 1;
            if (a.x - b.x < -EPS) return -1;
            if (a.x - b.x > EPS) return 1;
            return 0;
        }
    }
}

Measured memory_bytes: 9700