← Home
```go
package main

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

func main() {
	in := bufio.NewReader(os.Stdin)
	var n int
	fmt.Fscan(in, &n)
	var aStr, bStr string
	fmt.Fscan(in, &aStr, &bStr)

	a := make([]int, n+1)
	b := make([]int, n+1)
	for i := 1; i <= n; i++ {
		a[i] = int(aStr[i-1] - '0')
		b[i] = int(bStr[i-1] - '0')
	}

	c := make([]int64, n+1)
	var sumC int64 = 0
	for i := 1; i <= n; i++ {
		c[i] = int64(b[i]-a[i]) - c[i-1]
	}

	if c[n] != 0 {
		fmt.Println("-1")
		return
	}

	for i := 1; i < n; i++ {
		if c[i] > 0 {
			sumC += c[i]
		} else {
			sumC += -c[i]
		}
	}

	fmt.Println(sumC)
	if sumC == 0 {
		return
	}

	limit := int64(100000)
	if sumC < limit {
		limit = sumC
	}

	isValid := func(i int) bool {
		if i < 1 || i >= n {
			return false
		}
		if c[i] == 0 {
			return false
		}
		if c[i] > 0 {
			return a[i] < 9 && a[i+1] < 9
		}
		if i == 1 {
			return a[1] > 1 && a[2] > 0
		}
		return a[i] > 0 && a[i+1] > 0
	}

	q := make([]int, 0, n+300000)
	inQ := make([]bool, n+1)

	for i := 1; i < n; i++ {
		if isValid(i) {
			q = append(q, i)
			inQ[i] = true
		}
	}

	out := bufio.NewWriter(os.Stdout)
	defer out.Flush()

	var movesOutput int64 = 0
	head := 0
	for head < len(q) && movesOutput < limit {
		i := q[head]
		head++
		inQ[i] = false

		if !isValid(i) {
			continue
		}

		if c[i] > 0 {
			a[i]++
			a[i+1]++
			c[i]--
			fmt.Fprintln(out, i, 1)
		} else {
			a[i]--
			a[i+1]--
			c[i]++
			fmt.Fprintln(out, i, -1)
		}
		movesOutput++

		for _, j := range []int{i - 1, i, i + 1} {
			if j >= 1 && j < n && !inQ[j] && isValid(j) {
				inQ[j] = true
				q = append(q, j)
			}
		}
	}
}
```