/** * code generated by JHelper * More info: https://github.com/AlexeyDmitriev/JHelper * @author RiaD */ #include #include #include #include #include #include #ifndef SPCPPL_ASSERT #ifdef SPCPPL_DEBUG #define SPCPPL_ASSERT(condition) \ if(!(condition)) { \ throw std::runtime_error(std::string() + #condition + " in line " + std::to_string(__LINE__) + " in " + __PRETTY_FUNCTION__); \ } #else #define SPCPPL_ASSERT(condition) #endif #endif /** * Support decrementing and multi-passing, but not declared bidirectional(or even forward) because * it's reference type is not a reference. * * It doesn't return reference because * 1. Anyway it'll not satisfy requirement [forward.iterators]/6 * If a and b are both dereferenceable, then a == b if and only if *a and * b are bound to the same object. * 2. It'll not work with reverse_iterator that returns operator * of temporary which is temporary for this iterator * * Note, reverse_iterator is not guaranteed to work now too since it works only with bidirectional iterators, * but it's seems to work at least on my implementation. * * It's not really useful anywhere except iterating anyway. */ template class IntegerIterator: public std::iterator { public: explicit IntegerIterator(T value): value(value) { } IntegerIterator& operator++() { ++value; return *this; } IntegerIterator operator++(int) { IntegerIterator copy = *this; ++value; return copy; } IntegerIterator& operator--() { --value; return *this; } IntegerIterator operator--(int) { IntegerIterator copy = *this; --value; return copy; } T operator*() const { return value; } bool operator==(IntegerIterator rhs) { return value == rhs.value; } bool operator!=(IntegerIterator rhs) { return !(*this == rhs); } private: T value; }; template class IntegerRange { public: IntegerRange(T begin, T end): begin_(begin), end_(end) { SPCPPL_ASSERT(begin <= end); } IntegerIterator begin() const { return IntegerIterator(begin_); } IntegerIterator end() const { return IntegerIterator(end_); } private: T begin_; T end_; }; template class ReversedIntegerRange { typedef std::reverse_iterator> IteratorType; public: ReversedIntegerRange(T begin, T end): begin_(begin), end_(end) { SPCPPL_ASSERT(begin >= end); } IteratorType begin() const { return IteratorType(IntegerIterator(begin_)); } IteratorType end() const { return IteratorType(IntegerIterator(end_)); } private: T begin_; T end_; }; template IntegerRange range(T to) { return IntegerRange(0, to); } template IntegerRange range(T from, T to) { return IntegerRange(from, to); } template IntegerRange inclusiveRange(T to) { return IntegerRange(0, to + 1); } template IntegerRange inclusiveRange(T from, T to) { return IntegerRange(from, to + 1); } template ReversedIntegerRange downrange(T from) { return ReversedIntegerRange(from, 0); } template ReversedIntegerRange downrange(T from, T to) { return ReversedIntegerRange(from, to); } template ReversedIntegerRange inclusiveDownrange(T from) { return ReversedIntegerRange(from + 1, 0); } template ReversedIntegerRange inclusiveDownrange(T from, T to) { return ReversedIntegerRange(from + 1, to); } using namespace std; class PointsOnALine { public: void solve(std::istream& in, std::ostream& out) { int n; in >> n; bool all_x = true, all_y = true; int x, y; in >> x >> y; for (int i: range(n - 1)) { int a, b; in >> a >> b; if (x != a) { all_x = false; } if (y!=b) { all_y = false; } } if (all_x || all_y) { out << "YES"; } else { out << "NO"; } out << "\n"; } }; int main() { std::ios_base::sync_with_stdio(false); PointsOnALine solver; std::istream& in(std::cin); std::ostream& out(std::cout); in.tie(0); out << std::fixed; out.precision(20); solver.solve(in, out); return 0; }