#define _CRT_SECURE_NO_WARNINGS
#include <iterator>
#include <set>
#include <queue>
#include <iostream>
#include <sstream>
#include <stack>
#include <deque>
#include <map>
#include <cmath>
#include <memory.h>
#include <cstdlib>
#include <cstdio>
#include <cctype>
#include <algorithm>
#include <utility>
#include <time.h>
#define LL long long
#define PII pair<int,int>
#define FOR(i,a,b) for (int i = a; i < b; i++)
#define X first
#define Y second
using namespace std;
const double SZ = 10.0;
const int MAX_N = 200;
const int INF = 1e+9;
int n;
PII p[200000], cp[200000];
bool try_win() {
int ind = 0;
FOR (i,1,n) if (p[ind].X > p[i].X || (p[ind].X == p[i].X && p[ind].Y > p[i].Y)) {
ind = i;
}
int MX = -INF-47;
FOR (i,0,n) cp[i] = p[i], MX = max(MX, p[i].X);
int index = 0;
FOR (i,ind,n) p[index++] = cp[i];
FOR (i,0,ind) p[index++] = cp[i];
int i1 = 0, i2 = n-1;
int HY = p[i2].Y, LY = p[i1].Y;
FOR (x,p[0].X+1, MX+1) {
while (p[i1].X < x) { i1++; LY = min(LY, p[i1].Y);}
while (p[i2].X < x) { i2--; HY = max(HY, p[i2].Y);}
if (x - p[0].X == abs(HY - LY)) {
if (x == MX) return false;
return true;
}
}
return true;
}
int main() {
cin >> n;
FOR (i,0,n) cin >> p[i].X >> p[i].Y;
if (try_win()) {
cout << "First\n";
return 0;
}
FOR (i,0,n) p[i].X *= -1;
reverse(p,p+n);
if (try_win()) {
cout << "First\n";
return 0;
}
FOR (i,0,n) swap(p[i].X,p[i].Y);
reverse(p,p+n);
if (try_win()) {
cout << "First\n";
return 0;
}
FOR (i,0,n) p[i].X *= -1;
reverse(p,p+n);
if (try_win()) {
cout << "First\n";
return 0;
}
cout << "Second\n";
return 0;
}
/*
8
0 0
5 0
5 2
8 2
8 6
3 6
3 8
0 8
*/