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