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
#define _CRT_SECURE_NO_WARNINGS
#define _SILENCE_ALL_CXX17_DEPRECATION_WARNINGS
#include <stdio.h>
#include <algorithm>
#include <utility>
#include <functional>
#include <cstring>
#include <queue>
#include <stack>
#include <math.h>
#include <iterator>
#include <vector>
#include <string>
#include <set>
#include <math.h>
#include <iostream>
#include <random>
#include <map>
#include <fstream>
#include <iomanip>
#include <time.h>
#include <stdlib.h>
#include <list>
#include <typeinfo>
#include <list>
#include <set>
#include <assert.h>
#include <complex>
using namespace std;
#define LONG_INF 10000000000000
#define GOLD 1.61803398874989484820458
#define MAX_MOD 1000000007
#define MOD 998244353LL
#define seg_size 65536*4
#define REP(i,n) for(long long i = 0;i < n;++i)
class Point{
public:
	long double x;
	long double y;
	const Point operator*(const long double &a) {
		Point ans;
		ans.x = x * a;
		ans.y = y * a;
		return ans;
	}
	const Point operator=(const Point &a){
		x = a.x;
		y = a.y;
		return *this;
	}
	const Point operator+(const Point &a) const{
		Point ans;
		ans.x = a.x + x;
		ans.y = a.y + y;
		return ans;
	}
	const Point operator+=(const Point &a){
		x += a.x;
		y += a.y;
		return *this;
	}
	const Point operator-(const Point &a) const{
		Point ans;
		ans.x = x - a.x;
		ans.y = y - a.y;
		return ans;
	}
	const Point operator-=(const Point &a) {
		x -= a.x;
		y -= a.y;
		return *this;
	}
	static long double inner(const Point &a, const Point &b) {
		return a.x * b.x + a.y * b.y;
	}
	static long double cross(const Point &a, const Point &b) {
		return a.x * b.y - a.y * b.x;
	}
	static Point norms(const Point &a) {
		long double hoge = abs(a);
		Point ans;
		ans.x = a.x / hoge;
		ans.y = a.y / hoge;
		return ans;
	}
	static long double abs(const Point &a) {
		return sqrtl(a.x * a.x + a.y * a.y);
	}
};
int main(){
	int n;
	cin >> n;
	vector<Point> input(n + 2);
	REP(i, n) {
		cin >> input[i].x >> input[i].y;
	}
	input[n] = input[0];
	input[n + 1] = input[1];
	for (int i = 1; i < n; ++i) {
		long double a = Point::cross(input[i] - input[i - 1], input[i + 1] - input[i]);
		long double b = Point::cross(input[i + 1] - input[i], input[i + 2] - input[i + 1]);
		if (a*b < 0) {
			cout << 0 << endl;
			return 0;
		}
	}
	cout << 1 << endl;
	return 0;
}
