#include #include #include #include #include vector v; map, bool> cache; int max_depth; bool saiki(int index, int nokori, int depth) { // if (depth > max_depth) { cout << depth << endl; max_depth = depth; } if (cache.find(make_pair(index, nokori)) != cache.find(make_pair(index, nokori))) { return cache[make_pair(index, nokori)]; } if (nokori <= 0) { return cache[make_pair(index, nokori)] = index % 2 != 0; } if (index % 2 == 0) { for (int i = 1; i <= v[index]; i++) { if (saiki((index + 1) % v.size(), nokori - i, depth + 1)) { return cache[make_pair(index, nokori)] = true; } } return cache[make_pair(index, nokori)] = false; } else { for (int i = 1; i <= v[index]; i++) { if (saiki((index + 1) % v.size(), nokori - i, depth + 1)) { return cache[make_pair(index, nokori)] = false; } } return cache[make_pair(index, nokori)] = true; } } int main() { int n; while (cin >> n && n) { int S; cin >> S; v.clear(); cache.clear(); max_depth = 0; for (int i = 0; i < 2 * n; i++) { int tmp; cin >> tmp; v.push_back(tmp); } if (saiki(0, S, 0)) { cout << 1 << endl; } else { cout << 0 << endl; } } return 0; }