← Home
```go
package main

import (
	"bufio"
	"os"
)

func readInt(in *bufio.Reader) int {
	var n int
	var c byte
	for {
		c, _ = in.ReadByte()
		if c >= '0' && c <= '9' {
			n = int(c - '0')
			break
		}
	}
	for {
		c, _ = in.ReadByte()
		if c >= '0' && c <= '9' {
			n = n*10 + int(c-'0')
		} else {
			break
		}
	}
	return n
}

func main() {
	in := bufio.NewReader(os.Stdin)
	out := bufio.NewWriter(os.Stdout)
	defer out.Flush()

	n := readInt(in)
	m := readInt(in)

	u := make([]int, m)
	v := make([]int, m)

	words := (n + 63) >> 6

	A := make([][]uint64, n)
	B := make([][]uint64, n)
	for i := 0; i < n; i++ {
		A[i] = make([]uint64, words)
		B[i] = make([]uint64, words)
		B[i][i>>6] |= 1 << (i & 63)
	}

	for i := 0; i < m; i++ {
		u[i] = readInt(in) - 1
		v[i] = readInt(in) - 1
		A[u[i]][v[i]>>6] |= 1 << (v[i] & 63)
	}

	for i := 0; i < n; i++ {
		pivot := i
		for j := i; j < n; j++ {
			if (A[j][i>>6] & (1 << (i & 63))) != 0 {
				pivot = j
				break
			}
		}
		if pivot != i {
			A[i], A[pivot] = A[pivot], A[i]
			B[i], B[pivot] = B[pivot], B[i]
		}

		for j := 0; j < n; j++ {
			if i != j && (A[j][i>>6]&(1<<(i&63))) != 0 {
				for k := i >> 6; k < words; k++ {
					A[j][k] ^= A[i][k]
				}
				for k := 0; k < words; k++ {
					B[j][k] ^= B[i][k]
				}
			}
		}
	}

	for i := 0; i < m; i++ {
		if (B[v[i]][u[i]>>6] & (1 << (u[i] & 63))) == 0 {
			out.WriteString("YES\n")
		} else {
			out.WriteString("NO\n")
		}
	}
}
```