← Home
package main

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

func readWord(reader *bufio.Reader) []byte {
	var res []byte
	for {
		b, err := reader.ReadByte()
		if err != nil {
			break
		}
		if b > ' ' {
			res = append(res, b)
			break
		}
	}
	for {
		b, err := reader.ReadByte()
		if err != nil || b <= ' ' {
			break
		}
		res = append(res, b)
	}
	return res
}

func main() {
	reader := bufio.NewReaderSize(os.Stdin, 65536)
	word := readWord(reader)
	if len(word) == 0 {
		return
	}
	n := 0
	for _, b := range word {
		n = n*10 + int(b-'0')
	}

	aStr := readWord(reader)
	bStr := readWord(reader)

	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')
	}

	x := make([]int64, n+1)
	var C int64 = 0

	for i := 1; i <= n; i++ {
		diff := int64(B[i] - A[i])
		x[i] = diff - x[i-1]
	}

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

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

	out := bufio.NewWriterSize(os.Stdout, 65536)
	defer out.Flush()

	fmt.Fprintln(out, C)

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

	q := make([]int, 0, n+300000)
	for i := 1; i < n; i++ {
		if isValid(i) {
			q = append(q, i)
		}
	}

	moves := int64(0)
	limit := C
	if limit > 100000 {
		limit = 100000
	}

	head := 0
	for head < len(q) && moves < limit {
		i := q[head]
		head++

		if !isValid(i) {
			continue
		}

		if x[i] > 0 {
			A[i]++
			A[i+1]++
			x[i]--
			fmt.Fprintf(out, "%d 1\n", i)
		} else {
			A[i]--
			A[i+1]--
			x[i]++
			fmt.Fprintf(out, "%d -1\n", i)
		}

		moves++

		if isValid(i) {
			q = append(q, i)
		}
		if i > 1 && isValid(i-1) {
			q = append(q, i-1)
		}
		if i+1 < n && isValid(i+1) {
			q = append(q, i+1)
		}
	}
}