← Home
package main

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

func main() {
	reader := bufio.NewReader(os.Stdin)
	var n int
	fmt.Fscan(reader, &n)

	var A, B string
	fmt.Fscan(reader, &A)
	fmt.Fscan(reader, &B)

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

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

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

	C := int64(0)
	for i := 0; i < n-1; i++ {
		if c[i] > 0 {
			C += int64(c[i])
		} else {
			C += int64(-c[i])
		}
	}

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

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

	queue := make([]int, 0, n)
	inQueue := make([]bool, n-1)

	for i := 0; i < n-1; i++ {
		if isValid(i) {
			queue = append(queue, i)
			inQueue[i] = true
		}
	}

	moves := 0
	head := 0
	writer := bufio.NewWriter(os.Stdout)
	defer writer.Flush()

	for moves < 100000 && head < len(queue) {
		curr := queue[head]
		head++
		inQueue[curr] = false

		if !isValid(curr) {
			continue
		}

		sign := 1
		if c[curr] < 0 {
			sign = -1
		}

		a[curr] += sign
		a[curr+1] += sign
		c[curr] -= sign

		fmt.Fprintln(writer, curr+1, sign)
		moves++

		for _, idx := range []int{curr - 1, curr, curr + 1} {
			if idx >= 0 && idx < n-1 {
				if !inQueue[idx] && isValid(idx) {
					queue = append(queue, idx)
					inQueue[idx] = true
				}
			}
		}
	}
}