import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.Queue;
import java.util.StringTokenizer;
public class Main {
static class Pos {
int r;
int c;
public Pos(int r, int c) {
this.r = r;
this.c = c;
}
}
static int T, N;
static Pos start, end;
static ArrayList<Pos> list;
static boolean[] used;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = null;
StringBuilder sb = new StringBuilder();
T = Integer.parseInt(br.readLine());
for (int t = 0; t < T; t++) {
init(br);
process(sb);
}
print(sb);
}
private static void init(BufferedReader br) throws IOException {
StringTokenizer st;
N = Integer.parseInt(br.readLine());
used = new boolean[N];
list = new ArrayList<>();
// 상근이네 집
st = new StringTokenizer(br.readLine());
int x = Integer.parseInt(st.nextToken());
int y = Integer.parseInt(st.nextToken());
start = new Pos(x, y);
// 편의점 좌표
for (int i = 0; i < N; i++) {
st = new StringTokenizer(br.readLine());
x = Integer.parseInt(st.nextToken());
y = Integer.parseInt(st.nextToken());
Pos pos = new Pos(x, y);
list.add(pos);
}
// 페스티벌 좌표
st = new StringTokenizer(br.readLine());
x = Integer.parseInt(st.nextToken());
y = Integer.parseInt(st.nextToken());
end = new Pos(x, y);
}
private static void process(StringBuilder sb) {
if (bfs()) sb.append("happy\n");
else sb.append("sad\n");
}
private static boolean bfs() {
Queue<Pos> q = new LinkedList<>();
q.add(start);
while (!q.isEmpty()) {
Pos now = q.poll();
int r = now.r;
int c = now.c;
// 도착 검사
int dist = getDist(r, c, end.r, end.c);
if (dist <= 1000) return true;
for (int i = 0; i < N; i++) {
Pos next = list.get(i);
int nr = next.r;
int nc = next.c;
dist = getDist(r, c, nr, nc);
if (isImpossible(dist, i)) continue;
used[i] = true;
q.add(new Pos(nr, nc));
}
}
return false;
}
private static int getDist(int r, int c, int nr, int nc) {
return Math.abs(nr - r) + Math.abs(nc - c);
}
private static boolean isImpossible(int dist, int i) {
return 1000 < dist || used[i];
}
private static void print(StringBuilder sb) {
System.out.println(sb);
}
}
start
에서 BFS 탐색 시작end
에 도착이 가능한지 확인true
를 반환하고 탐색 종료