import java.util.*
data class Node(var x: Int = 0, var a: Int = 0, var b: Int = 0)
fun get(n: Node, x: Int): Int {
return when {
n.x == -1 -> x
x < n.x -> n.a
else -> n.b
}
}
fun combine(a: Node, b: Node): Node {
return when {
a.x == -1 -> b
b.x == -1 -> a
else -> Node(a.x, get(b, a.a), get(b, a.b))
}
}
fun emptyNode(): Node {
return Node(-1, -1, -1)
}
fun fromLength(len: Int): Node {
return if (len == -1) emptyNode() else Node(len, len, len - 1)
}
const val N = 300003
const val M = 300001
val S = sortedSetOf<Int>()
val T = Array<Node>(4 * N) { emptyNode() }
fun recalc(v: Int) {
T[v] = combine(T[v * 2 + 1], T[v * 2 + 2])
}
fun build(v: Int, l: Int, r: Int) {
if (l == r - 1) {
T[v] = emptyNode()
} else {
val m = (l + r) / 2
build(v * 2 + 1, l, m)
build(v * 2 + 2, m, r)
recalc(v)
}
}
fun upd(v: Int, l: Int, r: Int, pos: Int, x: Int) {
if (l == r - 1) {
T[v] = fromLength(x)
} else {
val m = (l + r) / 2
if (pos < m) upd(v * 2 + 1, l, m, pos, x)
else upd(v * 2 + 2, m, r, pos, x)
recalc(v)
}
}
fun get(v: Int, l: Int, r: Int, L: Int, R: Int): Node {
if (L >= R) return emptyNode()
if (L == l && R == r) return T[v]
val m = (l + r) / 2
return combine(get(v * 2 + 1, l, m, L, minOf(m, R)), get(v * 2 + 2, m, r, maxOf(L, m), R))
}
fun prepare() {
build(0, 0, M)
upd(0, 0, M, 0, 0)
S.add(0)
}
fun insertValue(x: Int) {
val it = S.ceiling(x)
if (it != null) {
upd(0, 0, M, it, it - x)
}
S.lower(x)?.let { upd(0, 0, M, x, x - it) }
S.add(x)
}
fun eraseValue(x: Int) {
upd(0, 0, M, x, -1)
S.remove(x)
val it = S.ceiling(x)
if (it != null) {
val y = it
S.lower(y)?.let { upd(0, 0, M, y, y - it) }
}
}
fun getGrundy(x: Int): Int {
val n = get(0, 0, M, 0, x)
val it = S.lower(x)
val y = it ?: return x
val valY = get(n, 0)
val dist = x - y
return if (dist <= valY) dist - 1 else dist
}
fun main() {
val q = readln().toInt()
prepare()
println((0 until q).map {
val params = readln().split(" ").map { it.toInt() }
val (t, x) = params.take(2)
if (t == 1) {
if (S.contains(x)) eraseValue(x) else insertValue(x)
null
} else {
val res = params.drop(2).fold(0) { r, y -> r xor getGrundy(y) }
if (res == 0) "Second" else "First"
}
}.filterNotNull().joinToString("\n"))
}