#include <bits/stdc++.h>
using namespace std;
int mex(const vector<int>& v) {
set<int> s(v.begin(), v.end());
for (int i = 0; i <= 4; ++i)
if (!s.count(i)) return i;
return 5;
}
bool is_good(vector<int> &triple) {
int x = *min_element(triple.begin(), triple.end());
int y = *max_element(triple.begin(), triple.end());
return mex(triple) == y - x;
}
bool can_make_good(vector<int>& a) {
int n = a.size();
for (int i = 0; i + 2 < n; ++i) {
vector<int> sub = {a[i], a[i+1], a[i+2]};
bool ok = false;
// Check if there are any -1s
if (count(sub.begin(), sub.end(), -1) == 0) {
if (!is_good(sub)) return false;
continue;
}
// Try all combinations for -1s using values 0,1,2,3
for (int x = 0; x <= 3; ++x)
for (int y = 0; y <= 3; ++y)
for (int z = 0; z <= 3; ++z) {
vector<int> t = sub;
if (t[0] == -1) t[0] = x;
if (t[1] == -1) t[1] = y;
if (t[2] == -1) t[2] = z;
if (is_good(t)) {
ok = true;
goto next;
}
}
next:
if (!ok) return false;
}
return true;
}
int main() {
int t; cin >> t;
while (t--) {
int n; cin >> n;
vector<int> a(n);
for (int &x : a) cin >> x;
cout << (can_make_good(a) ? "YES" : "NO") << '\n';
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgppbnQgbWV4KGNvbnN0IHZlY3RvcjxpbnQ+JiB2KSB7CiAgICBzZXQ8aW50PiBzKHYuYmVnaW4oKSwgdi5lbmQoKSk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8PSA0OyArK2kpCiAgICAgICAgaWYgKCFzLmNvdW50KGkpKSByZXR1cm4gaTsKICAgIHJldHVybiA1Owp9Cgpib29sIGlzX2dvb2QodmVjdG9yPGludD4gJnRyaXBsZSkgewogICAgaW50IHggPSAqbWluX2VsZW1lbnQodHJpcGxlLmJlZ2luKCksIHRyaXBsZS5lbmQoKSk7CiAgICBpbnQgeSA9ICptYXhfZWxlbWVudCh0cmlwbGUuYmVnaW4oKSwgdHJpcGxlLmVuZCgpKTsKICAgIHJldHVybiBtZXgodHJpcGxlKSA9PSB5IC0geDsKfQoKYm9vbCBjYW5fbWFrZV9nb29kKHZlY3RvcjxpbnQ+JiBhKSB7CiAgICBpbnQgbiA9IGEuc2l6ZSgpOwogICAgZm9yIChpbnQgaSA9IDA7IGkgKyAyIDwgbjsgKytpKSB7CiAgICAgICAgdmVjdG9yPGludD4gc3ViID0ge2FbaV0sIGFbaSsxXSwgYVtpKzJdfTsKICAgICAgICBib29sIG9rID0gZmFsc2U7CgogICAgICAgIC8vIENoZWNrIGlmIHRoZXJlIGFyZSBhbnkgLTFzCiAgICAgICAgaWYgKGNvdW50KHN1Yi5iZWdpbigpLCBzdWIuZW5kKCksIC0xKSA9PSAwKSB7CiAgICAgICAgICAgIGlmICghaXNfZ29vZChzdWIpKSByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KCiAgICAgICAgLy8gVHJ5IGFsbCBjb21iaW5hdGlvbnMgZm9yIC0xcyB1c2luZyB2YWx1ZXMgMCwxLDIsMwogICAgICAgIGZvciAoaW50IHggPSAwOyB4IDw9IDM7ICsreCkKICAgICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPD0gMzsgKyt5KQogICAgICAgICAgICAgICAgZm9yIChpbnQgeiA9IDA7IHogPD0gMzsgKyt6KSB7CiAgICAgICAgICAgICAgICAgICAgdmVjdG9yPGludD4gdCA9IHN1YjsKICAgICAgICAgICAgICAgICAgICBpZiAodFswXSA9PSAtMSkgdFswXSA9IHg7CiAgICAgICAgICAgICAgICAgICAgaWYgKHRbMV0gPT0gLTEpIHRbMV0gPSB5OwogICAgICAgICAgICAgICAgICAgIGlmICh0WzJdID09IC0xKSB0WzJdID0gejsKICAgICAgICAgICAgICAgICAgICBpZiAoaXNfZ29vZCh0KSkgewogICAgICAgICAgICAgICAgICAgICAgICBvayA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gbmV4dDsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICBuZXh0OgogICAgICAgIGlmICghb2spIHJldHVybiBmYWxzZTsKICAgIH0KICAgIHJldHVybiB0cnVlOwp9CgppbnQgbWFpbigpIHsKICAgIGludCB0OyBjaW4gPj4gdDsKICAgIHdoaWxlICh0LS0pIHsKICAgICAgICBpbnQgbjsgY2luID4+IG47CiAgICAgICAgdmVjdG9yPGludD4gYShuKTsKICAgICAgICBmb3IgKGludCAmeCA6IGEpIGNpbiA+PiB4OwogICAgICAgIGNvdXQgPDwgKGNhbl9tYWtlX2dvb2QoYSkgPyAiWUVTIiA6ICJOTyIpIDw8ICdcbic7CiAgICB9CiAgICByZXR1cm4gMDsKfQo=