← Home
package main

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

type Edge struct {
	x, y int
}

func main() {
	in := bufio.NewReaderSize(os.Stdin, 1<<20)
	out := bufio.NewWriterSize(os.Stdout, 1<<20)
	defer out.Flush()

	var n, m int
	if _, err := fmt.Fscan(in, &n, &m); err != nil {
		return
	}

	deg := make([]int, n+1)
	for i := 0; i < m; i++ {
		var x, y int
		fmt.Fscan(in, &x, &y)
		if x == y {
			deg[x] += 2
		} else {
			deg[x]++
			deg[y]++
		}
	}

	if m > n {
		fmt.Fprintln(out, "NO")
		return
	}
	for i := 1; i <= n; i++ {
		if deg[i] > 2 {
			fmt.Fprintln(out, "NO")
			return
		}
	}

	need := make([]int, n+1)
	for i := 1; i <= n; i++ {
		need[i] = 2 - deg[i]
	}

	ans := make([]Edge, 0, n-m)

	for {
		i := 1
		for i <= n && need[i] == 0 {
			i++
		}
		if i > n {
			break
		}

		if need[i] >= 2 {
			ans = append(ans, Edge{i, i})
			need[i] -= 2
		} else {
			j := i + 1
			for j <= n && need[j] == 0 {
				j++
			}
			if j > n {
				fmt.Fprintln(out, "NO")
				return
			}
			ans = append(ans, Edge{i, j})
			need[i]--
			need[j]--
		}
	}

	fmt.Fprintln(out, "YES")
	fmt.Fprintln(out, len(ans))
	for _, e := range ans {
		fmt.Fprintln(out, e.x, e.y)
	}
}