← Home
```go
package main

import (
	"bufio"
	"fmt"
	"os"
)

func main() {
	// Use buffered scanner for potentially large input
	scanner := bufio.NewScanner(os.Stdin)
	// Set buffer size to handle lines up to ~4MB (2*10^6 chars + overhead)
	const maxCapacity = 5 * 1024 * 1024
	buf := make([]byte, maxCapacity)
	scanner.Buffer(buf, maxCapacity)
	scanner.Split(bufio.ScanWords)

	// Read n (we can skip parsing it as an int, just advance scanner)
	scanner.Scan()

	// Read s
	scanner.Scan()
	s := scanner.Text()

	// Read t
	scanner.Scan()
	t := scanner.Text()

	c11 := 0
	c10 := 0
	c01 := 0

	// Count the types of pairs
	length := len(s)
	for i := 0; i < length; i++ {
		sb := s[i]
		tb := t[i]
		if sb == '1' {
			if tb == '1' {
				c11++
			} else {
				c10++
			}
		} else {
			if tb == '1' {
				c01++
			}
		}
	}

	yScore := 0
	aScore := 0

	// Phase 1: Process pairs where both have '1'. 
	// These are highest priority for both players.
	// Yaroslav moves first.
	yScore += (c11 + 1) / 2
	aScore += c11 / 2

	// Determine whose turn it is for Phase 2 based on moves made in Phase 1
	// If c11 is even, Yaroslav (0) moves next. If odd, Andrey (1) moves next.
	turn := c11 % 2

	// Phase 2: Process pairs where one has '1' and the other '0'.
	// Yaroslav gains points from c10, Andrey gains points from c01.
	// Players will prioritize gaining a point or denying the opponent a point.
	for c10 > 0 || c01 > 0 {
		if turn == 0 { // Yaroslav's turn
			if c10 > 0 {
				// Take own point
				c10--
				yScore++
			} else {
				// Block Andrey's point
				c01--
			}
		} else { // Andrey's turn
			if c01 > 0 {
				// Take own point
				c01--
				aScore++
			} else {
				// Block Yaroslav's point
				c10--
			}
		}
		turn = 1 - turn
	}

	if yScore > aScore {
		fmt.Println("First")
	} else if aScore > yScore {
		fmt.Println("Second")
	} else {
		fmt.Println("Draw")
	}
}
```