样例已过
#include <queue>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int maxn = 1e3 + 10, ux[5] = {0, 0, 0, 1, -1}, uy[5] = {0, 1, -1};
bool vis[maxn][maxn];
int T, n, nx, ny, tmpx, tmpy, x[maxn], y[maxn];
bool bfs(int sx, int sy) {
queue<int> qx, qy;
qx.push(sx), qy.push(sy);
for (int j = 1; qx.size(); j++) {
tmpx = qx.front();
tmpy = qy.front();
qx.pop(), qy.pop();
if (tmpx ^ n || tmpy ^ n) {
for (int i = 1; i <= 4; i++) {
nx = tmpx + ux[i];
ny = tmpy + uy[i];
if (nx < 1 || nx > n || ny < 1 || ny > n || vis[nx][ny]) continue;
vis[nx][ny] = true;
qx.push(nx), qy.push(ny);
}
} else return true;
if (j > n) continue;
nx = x[j];
ny = y[j];
vis[nx][ny] = true;
}
return false;
}
int main() {
scanf("%d", &T);
while (T--) {
scanf("%d", &n);
memset(vis, false, sizeof(vis));
memset(x, false, sizeof(x));
memset(y, false, sizeof(y));
for (int i = 1; i <= n; i++) scanf("%d %d", x + i, y + i);
puts(bfs(1, 1) ? "Yes" : "No");
}
return 0;
}