```go
package main
import (
"bufio"
"fmt"
"os"
)
func main() {
reader := bufio.NewReader(os.Stdin)
var t int
fmt.Fscan(reader, &t)
for i := 0; i < t; i++ {
solve(reader)
}
}
func solve(reader *bufio.Reader) {
var n int
fmt.Fscan(reader, &n)
var sx, sy int
fmt.Fscan(reader, &sx, &sy)
targetParity := (sx + sy) % 2
stacks := make([][]int, 2)
stacks[0] = make([]int, 0, n)
stacks[1] = make([]int, 0, n)
for i := 1; i <= n; i++ {
var x, y int
fmt.Fscan(reader, &x, &y)
p := (x + y) % 2
stacks[p] = append(stacks[p], i)
}
cntT := len(stacks[targetParity])
cntOther := len(stacks[1-targetParity])
var myRole string
var priority int
if n%2 != 0 {
if cntT > (n-1)/2 {
myRole = "First"
priority = 1 - targetParity
} else {
myRole = "Second"
priority = targetParity
}
} else {
if cntOther > n/2 {
myRole = "Second"
priority = targetParity
} else {
myRole = "First"
priority = 1 - targetParity
}
}
fmt.Println(myRole)
used := make([]bool, n+1)
pop := func(p int) int {
for len(stacks[p]) > 0 {
idx := stacks[p][len(stacks[p])-1]
stacks[p] = stacks[p][:len(stacks[p])-1]
if !used[idx] {
used[idx] = true
return idx
}
}
return -1
}
for turn := 1; turn <= n; turn++ {
isMyTurn := (myRole == "First" && turn%2 != 0) || (myRole == "Second" && turn%2 == 0)
if isMyTurn {
idx := pop(priority)
if idx == -1 {
idx = pop(1 - priority)
}
fmt.Println(idx)
} else {
var oppIdx int
fmt.Fscan(reader, &oppIdx)
used[oppIdx] = true
}
}
}
```