#include #include using lint = long long; struct Card { lint K, L; int D; }; int main() { int N; std::cin >> N; std::vector cards(N); for (auto& c : cards) { std::cin >> c.K >> c.L >> c.D; } lint ok = 1LL << 60, ng = -1; while (ok - ng > 1) { lint mid = (ok + ng) / 2; lint num = 0; for (auto card : cards) { if (mid < card.L) continue; num += std::min((mid - card.L) / (1LL << card.D) + 1, card.K); } ((num & 1) ? ok : ng) = mid; } std::cout << ok << std::endl; return 0; }