```go
package main
import (
"bufio"
"fmt"
"os"
)
func main() {
reader := bufio.NewReader(os.Stdin)
var n int
fmt.Fscan(reader, &n)
var row1, row2 string
fmt.Fscan(reader, &row1)
fmt.Fscan(reader, &row2)
dp := [2][2]int{
{0, -1000000},
{-1000000, -1000000},
}
for c := 0; c < n; c++ {
var grid [2]int
grid[0] = int(row1[c] - '0')
grid[1] = int(row2[c] - '0')
if c == 0 {
grid[0] = 0
}
new_dp := [2][2]int{
{-1000000, -1000000},
{-1000000, -1000000},
}
for r := 0; r < 2; r++ {
for f := 0; f < 2; f++ {
if dp[r][f] < 0 {
continue
}
val_r := grid[r]
val_o := grid[1-r]
if f == 1 {
val_o = 0
}
if dp[r][f] > new_dp[r][0] {
new_dp[r][0] = dp[r][f]
}
if val_r == 1 {
if dp[r][f]+1 > new_dp[r][0] {
new_dp[r][0] = dp[r][f] + 1
}
}
if val_o == 1 {
if dp[r][f]+1 > new_dp[1-r][1] {
new_dp[1-r][1] = dp[r][f] + 1
}
}
if val_r == 1 && val_o == 1 {
if dp[r][f]+2 > new_dp[1-r][1] {
new_dp[1-r][1] = dp[r][f] + 2
}
}
}
}
dp = new_dp
}
ans := 0
for r := 0; r < 2; r++ {
for f := 0; f < 2; f++ {
if dp[r][f] > ans {
ans = dp[r][f]
}
}
}
fmt.Println(ans)
}
```