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;
const long double eps = 1e-6;
int sgn(long double a, long double b = 0) {
  a -= b;
  return (a > eps) - (a < -eps);
}
struct poi {
  long double x, y;
  void r() {
    cin >> x;
    cin >> y;
  }
  void w() { cout << x << ' ' << y << '\n'; }
  poi operator-(poi p) { return {x - p.x, y - p.y}; }
  poi operator+(poi p) { return {x + p.x, y + p.y}; }
  poi operator*(long double d) { return {x * d, y * d}; }
  poi operator/(long double d) { return {x / d, y / d}; }
  bool operator==(poi p) { return !sgn(x, p.x) && !sgn(y, p.y); }
  long double dot(poi p) { return x * p.x + y * p.y; }
  long double cross(poi p) { return x * p.y - y * p.x; }
  long double len() { return sqrt(x * x + y * y); }
  long double len2() { return x * x + y * y; }
  poi proj(poi p, poi q) {
    long double s = (*this - p).dot(q - p) / (q - p).len2();
    return p + (q - p) * s;
  }
  long double dis(poi p, poi q) {
    if ((*this - p).dot(q - p) < 0) return (*this - p).len();
    if ((*this - q).dot(p - q) < 0) return (*this - q).len();
    return abs((*this - p).cross(q - p) / (q - p).len());
  }
};
long double xmul(poi a, poi b, poi c) { return (b - a).cross(c - a); }
int ccw(poi a, poi b, poi c) {
  poi u = b - a, v = c - a;
  if (u.cross(v) > eps) return 1;
  if (u.cross(v) < -eps) return -1;
  if (u.dot(v) < -eps) return -2;
  if (u.len2() + eps < v.len2()) return 2;
  return 0;
}
bool si(poi a, poi b, poi c, poi d) {
  return ccw(a, b, c) * ccw(a, b, d) <= 0 && ccw(c, d, a) * ccw(c, d, b) <= 0;
}
poi li(poi a, poi b, poi c, poi d) {
  long double u = xmul(c, d, a), v = xmul(c, d, b);
  return (a * v - b * u) / (v - u);
}
const int N = 111;
poi p[N];
int main() {
  ios ::sync_with_stdio(false);
  cout << fixed << setprecision(1);
  int n;
  cin >> n;
  for (int i = 0; i < n; i++) p[i].r();
  p[n] = p[0];
  bool conv = true;
  for (int i = 0; i < n - 1; i++)
    if (!(ccw(p[i], p[i + 1], p[i + 2]) > 0)) conv = false;
  cout << conv << '\n';
  return 0;
}
