#include using namespace std; const int MaxN = (int)1e6 + 10; int n, k; int x[MaxN], y[MaxN]; vector X, Y; bool OK; int mat[20][20]; int fnd(vector v, int x) { assert (binary_search(v.begin(), v.end(), x)); return lower_bound(v.begin(), v.end(), x) - v.begin(); } void go(int pos, int k) { if (pos == k + 1) { bool CAN = true; for (size_t i = 0; i < X.size(); ++i) { for (size_t j = 0; j < Y.size(); ++j) { if (!mat[i][j]) { CAN = false; } } } OK |= CAN; return; } int lx = 0, rx = X.size() - 1; int ly = 0, ry = Y.size() - 1; { for (int i = lx; i <= x[pos]; ++i) { for (int j = ly; j <= y[pos]; ++j) { mat[i][j] += 1; } } go(pos + 1, k); for (int i = lx; i <= x[pos]; ++i) { for (int j = ly; j <= y[pos]; ++j) { mat[i][j] -= 1; } } } { for (int i = lx; i <= x[pos]; ++i) { for (int j = y[pos]; j <= ry; ++j) { mat[i][j] += 1; } } go(pos + 1, k); for (int i = lx; i <= x[pos]; ++i) { for (int j = y[pos]; j <= ry; ++j) { mat[i][j] -= 1; } } } { for (int i = x[pos]; i <= rx; ++i) { for (int j = ly; j <= y[pos]; ++j) { mat[i][j] += 1; } } go(pos + 1, k); for (int i = x[pos]; i <= rx; ++i) { for (int j = ly; j <= y[pos]; ++j) { mat[i][j] -= 1; } } } { for (int i = x[pos]; i <= rx; ++i) { for (int j = y[pos]; j <= ry; ++j) { mat[i][j] += 1; } } go(pos + 1, k); for (int i = x[pos]; i <= rx; ++i) { for (int j = y[pos]; j <= ry; ++j) { mat[i][j] -= 1; } } } } void solve() { scanf("%d%d", &k, &n); assert (1 <= k && k <= 100); assert (1 <= n && n <= 1e9); X.clear(); Y.clear(); set > s; for (int i = 1; i <= k; ++i) { scanf("%d%d", &x[i], &y[i]); // assert (!s.count(make_pair(x[i], y[i]))); s.insert(make_pair(x[i], y[i])); assert (0 <= x[i] && x[i] <= n - 1); assert (0 <= y[i] && y[i] <= n - 1); X.push_back(x[i]); if (x[i] > 0) X.push_back(x[i] - 1); if (x[i] + 1 < n) X.push_back(x[i] + 1); Y.push_back(y[i]); if (y[i] > 0) Y.push_back(y[i] - 1); if (y[i] + 1 < n) Y.push_back(y[i] + 1); } X.push_back(0); X.push_back(n - 1); Y.push_back(0); Y.push_back(n - 1); if (k >= 4) { cout << "yes\n"; return; } sort(X.begin(), X.end()); sort(Y.begin(), Y.end()); X.resize(unique(X.begin(), X.end()) - X.begin()); Y.resize(unique(Y.begin(), Y.end()) - Y.begin()); for (int i = 1; i <= k; ++i) { x[i] = fnd(X, x[i]); y[i] = fnd(Y, y[i]); } OK = false; memset(mat, 0, sizeof(mat)); go(1, k); cout << (OK ? "yes" : "no") << "\n"; } int main() { // freopen("input.txt", "r", stdin); // freopen("output.txt", "w", stdout); int t; scanf("%d", &t); assert (1 <= t && t <= 5000); while (t --> 0) { solve(); } return 0; }