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;
template <class T>
ostream& operator<<(ostream& os, const vector<T>& vs) {
  if (vs.empty()) return os << "[]";
  os << "[" << vs[0];
  for (int i = 1; i < vs.size(); i++) os << " " << vs[i];
  return os << "]";
}
const double EPS = 1e-7;
struct Point {
  double x, y;
  Point() {}
  Point(double x, double y) : x(x), y(y) {}
  Point operator+(const Point& p) const { return Point(x + p.x, y + p.y); }
  Point operator-(const Point& p) const { return Point(x - p.x, y - p.y); }
  Point operator*(double k) const { return Point(k * x, k * y); }
  Point operator/(double k) const { return Point(x / k, y / k); }
};
double dot(const Point& a, const Point& b) { return a.x * b.x + a.y * b.y; }
double cross(const Point& a, const Point& b) { return a.x * b.y - a.y * b.x; }
double norm(const Point& a) { return sqrt(dot(a, a)); }
Point rot90(const Point& p) { return Point(p.y, -p.x); }
ostream& operator<<(ostream& os, const Point& p) {
  return os << "(" << p.x << "," << p.y << ")";
}
istream& operator>>(istream& is, Point& p) { return is >> p.x >> p.y; }
int ccw(Point a, Point b, Point c) {
  b = b - a;
  c = c - a;
  if (cross(b, c) > EPS) return +1;
  if (cross(b, c) < -EPS) return -1;
  if (dot(b, c) < 0) return +2;
  if (norm(b) < norm(c)) return -2;
  return 0;
}
bool convex(const vector<Point>& vs) {
  int N = vs.size();
  for (int i = 0; i < N; i++) {
    Point a = vs[(i + N - 1) % N];
    Point b = vs[i];
    Point c = vs[(i + 1) % N];
    if (ccw(a, b, c) != 1 && ccw(a, b, c) != -2) return false;
  }
  return true;
}
int main() {
  int N;
  cin >> N;
  vector<Point> P(N);
  for (int i = 0; i < N; i++) cin >> P[i];
  cout << convex(P) << endl;
  return 0;
}
