For a given polygon g, print "1" if g is a convex polygon, "0" otherwise. Here, in a convex polygon, all interior angles are less than or equal to 180 degrees.

g is represented by a sequence of points p1, p2,..., pn where line segments connecting pi and pi+1 (1 ≤ i ≤ n-1) are sides of the polygon. The line segment connecting pn and p1 is also a side of the polygon.

Constraints

* 3 ≤ n ≤ 100
* -10000 ≤ xi, yi ≤ 10000
* No point of the polygon will occur more than once.
* Two sides of the polygon can intersect only at a common endpoint.

Input

g is given by coordinates of the points p1,..., pn in the following format:


n
x1 y1
x2 y2
:
xn yn


The first integer n is the number of points. The coordinate of a point pi is given by two integers xi and yi. The coordinates of points are given in the order of counter-clockwise visit of them.

Output

Print "1" or "0" in a line.

Examples

Input

4
0 0
3 1
2 3
0 3


Output

1


Input

5
0 0
2 0
1 1
2 2
0 2


Output

0
#include <bits/stdc++.h>
using namespace std;
double eps = 1e-7;
bool eq(double a, double b) { return (b - a < eps && a - b < eps); }
double dot(complex<double> a, complex<double> b) { return real(b * conj(a)); }
double cross(complex<double> a, complex<double> b) { return imag(b * conj(a)); }
complex<double> project(complex<double> a, complex<double> b,
                        complex<double> c) {
  b -= a;
  c -= a;
  return a + b * real(c / b);
}
complex<double> reflect(complex<double> a, complex<double> b,
                        complex<double> c) {
  b -= a;
  c -= a;
  return a + conj(c / b) * b;
}
int ccw(complex<double> a, complex<double> b, complex<double> c) {
  b -= a, c -= a, a = c * conj(b);
  if (a.imag() > eps) return 1;
  if (a.imag() < -eps) return -1;
  if (a.real() < -eps) return 2;
  if (abs(b) + eps < abs(c)) return -2;
  return 0;
}
double dist(complex<double> a, complex<double> b, complex<double> c) {
  if (dot(b - a, c - a) < 0) return abs(c - a);
  if (dot(a - b, c - b) < 0) return abs(c - b);
  return abs(cross(b - a, c - a)) / abs(b - a);
}
bool isintersect(complex<double> a, complex<double> b, complex<double> c,
                 complex<double> d) {
  return ((ccw(a, b, c) * ccw(a, b, d) <= 0) &&
          (ccw(c, d, a) * ccw(c, d, b) <= 0));
}
complex<double> intersect(complex<double> a, complex<double> b,
                          complex<double> c, complex<double> d) {
  a -= d;
  b -= d;
  c -= d;
  return d + a + (b - a) * imag(a / c) / imag(a / c - b / c);
}
double dist(complex<double> a, complex<double> b, complex<double> c,
            complex<double> d) {
  if (isintersect(a, b, c, d)) return 0;
  double ab = min(dist(a, b, c), dist(a, b, d));
  double cd = min(dist(c, d, a), dist(c, d, b));
  return min(ab, cd);
}
double calcArea(vector<complex<double> > &t) {
  double res = 0;
  int n = t.size();
  for (int i = 0; i < n; i++) res += cross(t[i], t[(i + 1 == n ? 0 : i + 1)]);
  return abs(res / 2.0);
}
int main() {
  int n;
  cin >> n;
  vector<complex<double> > t;
  double x, y;
  for (int i = 0; i < n; i++) {
    cin >> x >> y;
    t.push_back(complex<double>(x, y));
  }
  int ans = 1;
  for (int i = 0; i < n; i++) {
    int j = (i + 1) % n;
    int k = (i + 2) % n;
    if (ccw(t[i], t[j], t[k]) != 0) ans = 0;
  }
  cout << ans << endl;
  return 0;
}
