Pagini recente » Cod sursa (job #2859620) | Cod sursa (job #2086141) | Cod sursa (job #667761) | Cod sursa (job #178306) | Cod sursa (job #2236241)
#include <bits/stdc++.h>
#define all(cont) cont.begin(), cont.end()
#define pb push_back
#define fi first
#define se second
using namespace std;
typedef pair <int, int> pii;
typedef vector <int> vi;
typedef long long ll;
typedef unsigned long long ull;
ifstream f ("perle.in");
ofstream g ("perle.out");
bool check (char c, vi &v) {
int n = v.size();
stack <char> stk;
stk.push (c);
int i = 0;
while (i < n && !stk.empty()) {
c = stk.top();
stk.pop();
if (c == 'A') {
++i;
} else if (c == 'B') {
if (v[i] == 2) {
++i;
stk.push ('B');
} else if (v[i] == 1 && i + 4 < n && v[i + 2] == 3) {
i += 4;
stk.push ('C');
} else {
return false;
}
} else {
if (v[i] == 2) {
++i;
} else if (v[i] == 1) {
if (i + 2 < n && v[i + 1] == 2) {
i += 3;
} else {
return false;
}
} else {
if (i + 2 < n) {
++i;
stk.push ('C');
stk.push ('B');
} else {
return false;
}
}
}
}
if (i < n || !stk.empty()) {
return false;
}
return true;
}
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
#ifdef LOCAL_DEFINE
freopen (".in", "r", stdin);
#endif
int q;
f >> q;
while (q--) {
int n;
f >> n;
vi v (n);
for (int i = 0; i < n; ++i) {
f >> v[i];
}
bool ans = 0;
ans |= check ('A', v);
ans |= check ('B', v);
ans |= check ('C', v);
g << ans << '\n';
}
f.close();
g.close();
return 0;
}