#pragma GCC optimize("Ofast") #pragma GCC optimize("unroll-loops") #include // #include // using namespace atcoder; using namespace std; using ll = long long; using pll = pair; using vll = vector; using vvll = vector; using vpll = vector; using vvpll = vector; #define rep(i, l, r) for (ll i = l; i < ll(r); i++) #define rrep(i, l, r) for (ll i = ll(r-1); i >= l; i--) #pragma region // doubling template T fpow(T base, T id, ll exp, std::function bop); template T fpow(T base, ll exp); template T fpow(T base, ll exp) { T ans = 1; while (exp > 0) { if (exp & 1ll) { ans = ans * base; } base = base * base; exp >>= 1; } return ans; } template T fpow(T base, T id, ll exp, std::function bop) { T ans = id; while (exp > 0) { if (exp & 1ll) { ans = bop(ans, base); } base = bop(base, base); exp >>= 1; } return ans; } #pragma endregion #pragma region #pragma endregion #include using namespace atcoder; using mint = modint998244353; ll nanka(ll l, ll r) { return ((r - l) %3 + 3) % 3; } vll solve(vll a) { if (a.size() == 1) return a; else { vll next; rep(i, 0, a.size() - 2) { if ( nanka(a[i], a[i+1]) == 1 && nanka(a[i+1], a[i+2]) == 1 && nanka(a[i+2], a[i]) == 1 ) { next.push_back(1); } else if ( nanka(a[i], a[i+1]) == 2 && nanka(a[i+1], a[i+2]) == 2 && nanka(a[i+2], a[i]) == 2 ) { next.push_back(2); } else { next.push_back(0); } } return solve(next); } } int main() { ll n; cin >> n; n = n * 2 + 1; vll a(n); rep(i, 0, n) { cin >> a[i]; } if (n == 1) { cout << a[0] << endl; } else { if (a[0] == a[1] || a[1] == a[2] || a[2] == a[0]) { cout << 0 << endl; } else { bool ok = true; rep(i, 3, n) { if (i % 2 == 1 && a[i] != a[1]) { ok = false; break; } if (i % 4 == 0 && a[i] != a[0]) { ok = false; break; } if (i % 4 == 2 && a[i] != a[2]) { ok = false; break; } } if (!ok) { cout << 0 << endl; } else { a.resize((n % 4 == 1) ? 5 : 3); cout << solve(a)[0] << endl; } } } }