#include #define num long long using namespace std; struct groups { void add_group(num end, num evens) { m_Breakpoints.push_back(end); m_Evens.push_back(evens); } num& get_numbers(num i) { auto br = lower_bound(m_Breakpoints.cbegin(), m_Breakpoints.cend(), i); if (br == m_Breakpoints.cend()) { return m_Evens.back(); } num in = br - m_Breakpoints.begin(); if (m_Breakpoints[in] == i) ++in; return m_Evens[in]; } vector m_Breakpoints; vector m_Evens; }; bool load_data(vector& nums, groups& gr, num& m) { num n, tmp, evens = 0, i = 1; char op; cin >> n >> m >> tmp; nums.reserve(n); nums[0] = tmp%2 == 0; bool even = true; if (nums[0]) ++evens; for (; i < n; ++i){ cin >> op >> tmp; if (op != '*') { gr.add_group(i, evens); if (evens == 0) { even = !even; } evens = 0; } nums[i] = tmp % 2 == 0; if (nums[i]) { ++evens; } } gr.add_group(i, evens); if (evens == 0) { even = !even; } return even; } signed main(){ cin.tie(0); ios::sync_with_stdio(0); num m, i, val; vector nums; groups gr; bool even = load_data(nums, gr, m); while (m--) { cout << (even ? "even\n" : "odd\n"); cin >> i >> val; --i; bool new_even = val % 2 == 0; if (nums[i] == new_even) { continue; } num old = gr.get_numbers(i); gr.get_numbers(i) = old + (new_even ? 1 : -1); if ((old == 0 && new_even) || (!new_even && old == 1)) { even = !even; } } cout << (even ? "even\n" : "odd\n"); return 0; }