#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef long double ld;
typedef pair<ll, ll> pll;
typedef vector<ll> vll;
typedef vector<vector<ll>> vvll;
typedef vector<pll> vpll;

void INX(){}
template<typename Head, typename... Tail>
void INX(Head&& head, Tail&&... tail)
{
    cin >> head;
    INX(forward<Tail>(tail)...);
}
void OUTX(){}
template<typename Head, typename... Tail>
void OUTX(Head&& head, Tail&&... tail)
{
    cout << head << endl;
    OUTX(forward<Tail>(tail)...);
}

#define ADD emplace_back
#define MP make_pair
#define VVEC(type) vector<vector<type>>


int main()
{
    ll N;
    INX(N);

    vpll xy(N);
    for (ll i = 0; i < N; i++)
    {
        INX(xy[i].first, xy[i].second);
    }
    sort(xy.begin(), xy.end());
    
    ll cnt = 0;
    bool isEnd = false;
    for (ll i = 0; i < N - 1; i++)
    {
        if(xy[i].first == xy[i + 1].first)
        {
            cnt++;
            if(cnt == 2)
            {
                isEnd = true;
                OUTX("Yes");
                break;
            }
        }
        else
        {
            cnt = 0;
        }
    }
    

    for (ll i = 0; !isEnd && i < N - 2; i++)
    {
        for (ll j = i + 1; !isEnd && j < N - 1; j++)
        {
            if(xy[i].first == xy[j].first)
            {
                continue;
            }

            pll dif = MP(xy[j].first - xy[i].first, xy[j].second - xy[i].second);
            ld a = (ld)dif.second / (ld)dif.first;
            ld b = (ld)xy[i].second - a * (ld)xy[i].first;
            
            for (ll k = j + 1; !isEnd && k < N; k++)
            {
                ld tmp = (ld)xy[k].second - (a * (ld)xy[k].first + b);
                if(abs(tmp) < 0.000000001)
                {
                    isEnd = true;
                    OUTX("Yes");
                    break;
                }
            }
        }
    }
    
    if(!isEnd)
    {
        OUTX("No");
    }


    return 0;
}

#include <bits/stdc++.h>
#define rep(i, n) for (int i = 0; i < (int)(n); i++)
#define reps(i, n) for (int i=1; i < (int)(n); i++)
#define rrep(i, n) for (int i=((int)(n)-1); i>=0; i--)
#define rreps(i, n) for (int i=((int)(n)-1); i>0; i--)
#define ALL(x) (x).begin(), (x).end()
#define SZ(x) ((int)(x).size())
using namespace std;
using lint = long long;
// using p = pair<int, int>;
template<class T>bool chmax(T &a, const T &b) { if (a<b) { a=b; return 1; } return 0; }
template<class T>bool chmin(T &a, const T &b) { if (b<a) { a=b; return 1; } return 0; }
// #define DEBUG

int main() {
  #ifdef DEBUG
  const time_t START_MILLISEC = time(NULL) * 1000;
  #endif
  int N; cin >> N;
  vector<int> x(N);
  vector<int> y(N);
  rep (i, N) cin >> x[i] >> y[i];

  bool flag = false;
  for (int i = 0; i < N; i++) {
    for (int j = i+1; j < N; j++) {
      for (int k = j+1; k < N; k++) {
        int xi = x[i] - x[k], yi = y[i] - y[k];
        int xj = x[j] - x[k], yj = y[j] - y[k];
        if (xi * yj == xj * yi) flag = true;
        // double aij = (y[j] - y[i]) / (double)(x[j] - x[i]);
        // double yk = aij * (x[k] - x[i]) + y[i];
        // if (yk == (double)y[k]) {
          // flag = true;
          // printf("y=%lf(x-%d)+%d\n yk=%lf, y[k]=%d\n", aij, x[i], y[i], yk, y[k]);
        // }
      }
    }
  }

  if (flag) cout << "Yes" << endl;
  else cout << "No" << endl;
  // scanf("%d%d%d%d", &, &, &, &);
  #ifdef DEBUG
  const time_t END_MILLISEC = time(NULL) * 1000;
    cout << e-s << endl;
  #endif
  return 0;
}