#if 1 #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define in std::cin #define out std::cout int32_t N; std::tuple BOX[1000]; int32_t DP[1000]; int main() { using std::endl; in.sync_with_stdio(false); out.sync_with_stdio(false); in >> N; for (size_t i = 0; i < N; i++) { int32_t arr[3]; in >> arr[0] >> arr[1] >> arr[2]; std::sort(arr, arr + 3); std::get<0>(BOX[i]) = arr[0]; std::get<1>(BOX[i]) = arr[1]; std::get<2>(BOX[i]) = arr[2]; } std::sort(BOX, BOX + N); for (size_t i = 0; i < N; i++) { for (size_t j = 0; j < i; ++j) { if ( std::get<0>(BOX[i]) > std::get<0>(BOX[j]) && std::get<1>(BOX[i]) > std::get<1>(BOX[j]) && std::get<2>(BOX[i]) > std::get<2>(BOX[j]) ) { DP[i] = std::max(DP[i], DP[j] + 1); } } } out << (*std::max_element(DP,DP + N))+1 << endl; return 0; } #endif