#include <iostream>
#include <map>
#include <queue>
#include <algorithm>
#include <complex>
#include <cassert>

using namespace std;
typedef long long ll;

typedef long double R;
typedef complex<R> P;


namespace std {
    bool operator < (P a, P b) {
        return real(a) != real(b) ? real(a) < real(b) : imag(a) < imag(b);
    }
    bool operator > (P a, P b) {
        return (b < a);
    }
}

const R EPS = 1e-7;
const R PI = acos(-1);

int sgn(R a) {
    if (a < -EPS) return -1;
    if (a > EPS) return 1;
    return 0;
}


bool near(P a, P b) {
    return !sgn(abs(a-b));
}

R cross(P a, P b) { return imag(conj(a)*b); }
R dot(P a, P b) { return real(conj(a)*b); }

/* 1->cclock
  -1->clock
   0->on
   2->back
  -2->front
  */
int ccw(P a, P b, P c) {
    assert(!near(a, b));
    if (near(a, c) || near(b, c)) return 0;
    int s = sgn(cross(b-a, c-a));
    if (s) return s;
    if (a > b) swap(a, b);
    if (c < a) return 2;
    if (b < c) return -2;
    return 0;
}

struct L {
    P x, y;
    L() {};
    L(P x, P y) :x(x), y(y) {};
};

R abs(const L &l) {
    return abs(l.y - l.x);
}

struct C {
    P p;
    R r;
    C () {};
    C (P p, R r) : p(p), r(r) {};
};

R distLP(const L &l, const P &p) {
	assert(!near(l.x, l.y));
    return abs(cross(l.y-l.x, p-l.x)/abs(l));
}

//need Intersect/distLP
int crossP(const C &c, const L &l, L &r) {
    R u = distLP(l, c.p);
    int si = sgn(u - c.r);
    if (si == 1) return 0;
    P v = (l.y-l.x) / abs(l) * P(0, -1); //l?????´???????????????????????????
    v *= c.r;
    if (ccw(l.x, l.y, c.p) < 0) v *= -1;
    //v?????????????????????l?????¨??????????????????????????????
    if (si == 0) {
    	r.x = r.y = c.p + v;
    	return 1;
    }
    assert(0 <= u/c.r && u/c.r <= 1);
    R th = acos(u/c.r);
    r.x = c.p+v*polar<R>(1.0,-th);
    r.y = c.p+v*polar<R>(1.0,th);
    return 2;
}

C ci[110];
int main() {
	while (true) {
		int n;
		cin >> n;
		if (!n) break;
		for (int i = 0; i < n; i++) {
			R x, y, r;
			cin >> x >> y >> r;
			ci[i] = C(P(x, y), r);
			assert(r);
		}
		int m;
		cin >> m;
		for (int i = 0; i < m; i++) {
			R tx, ty, sx, sy;
			cin >> tx >> ty >> sx >> sy;
			P t = P(tx, ty), s = P(sx, sy);

			bool f = true;
			for (int j = 0; j < n; j++) {
				L l;
				int cp = crossP(ci[j], L(t, s), l);
				if (!cp) continue;
				if (!ccw(t, s, l.x) || !ccw(t, s, l.y)) {
					f = false;
					break;
				}
			}
			if (f) {
				cout << "Danger" << endl;
			} else {
				cout << "Safe" << endl;
			}
		}
	}
	return 0;
}