#ifdef LOCAL
#include "snippets/debug.h"
#else
#include <bits/stdc++.h>
using namespace std;
#define debug(...) 42
#endif
#define i64 long long
template<typename T>
inline T Gcd(T a, T b) {
a = abs(a), b = abs(b);
if (b > a) swap(a, b);
assert(b >= 0);
while (b) {
a %= b;
swap(a, b);
}
return a;
}
#define int i64
signed main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int tt = 1;
#ifdef LOCAL
// cin >> tt;
#endif
for (int tc = 1; tc <= tt; tc++) {
debug(tc);
int n;
cin >> n;
int seed = 983275;
mt19937 gen(seed);
vector<pair<int, int>> pts(n);
for (auto &[x, y] : pts) cin >> x >> y;
shuffle(pts.begin(), pts.end(), gen);
debug(pts);
set<tuple<i64, i64, i64>> st;
tuple<i64, i64, i64> ans;
int done = false;
function Good = [&] (i64 a, i64 b, i64 c) {
int cnt = 0;
for (int i = 0; i < n && cnt <= n / 2; i++) {
auto [x, y] = pts[i];
debug(a * x + b * y + c, x, y);
if (a * x + b * y + c == 0) {
cnt++;
}
}
debug(a, b, c, cnt);
if (cnt > n / 2) done = true;
return done;
};
function Abc = [&] (int i1, int i2) -> tuple<int, int, int> {
auto [x1, y1] = pts[i1];
auto [x2, y2] = pts[i2];
i64 a = (y1 - y2), b = (-x1 + x2), c = -(y1 - y2) * x1 - (x2 - x1) * y1;
int gc = Gcd(Gcd(a, b), c);
return {a / gc, b / gc, c / gc};
};
debug();
int cc = 0;
for (int i = 0; i < n && cc < 1000 && !done; i += 2) {
int i1 = i;
int i2 = (i + 1) % n;
auto [a, b, c] = Abc(i1, i2);
if (st.contains({a, b, c})) continue;
cc++;
if (Good(a, b, c)) {
ans = {a, b, c};
}
else {
st.emplace(a, b, c);
st.emplace(-a, -b, -c);
}
}
debug(st);
if (done) {
cout << "Yes\n";
auto [a, b, c] = ans;
cout << a << ' ' << b << ' ' << c << '\n';
}
else {
cout << "No\n";
}
}
debug(verify);
}