```go
package main
import "fmt"
func main() {
var n int
fmt.Scan(&n)
a := make([]int, n)
for i := 0; i < n; i++ {
fmt.Scan(&a[i])
}
if n <= 2 {
fmt.Println(n)
return
}
// inc[i] = length of longest strictly increasing subsegment ending at i
// dec[i] = length of longest strictly increasing subsegment starting at i
inc := make([]int, n)
dec := make([]int, n)
inc[0] = 1
for i := 1; i < n; i++ {
if a[i] > a[i-1] {
inc[i] = inc[i-1] + 1
} else {
inc[i] = 1
}
}
dec[n-1] = 1
for i := n - 2; i >= 0; i-- {
if a[i+1] > a[i] {
dec[i] = dec[i+1] + 1
} else {
dec[i] = 1
}
}
ans := 2 // We can always change one element; at least length 2 if n>=2
// But also consider just the longest increasing subsegment + 1 (change one neighbor)
for i := 0; i < n; i++ {
// Option 1: extend the increasing run ending at i by changing i+1
val := inc[i] + 1
if val > ans && val <= n {
ans = val
}
// Option 2: extend the increasing run starting at i by changing i-1
val = dec[i] + 1
if val > ans && val <= n {
ans = val
}
}
// Option 3: merge two runs by changing position i
// Change a[i] so that a[i-1] < a[i] < a[i+1], which requires a[i+1] - a[i-1] >= 2
for i := 1; i < n-1; i++ {
if a[i+1]-a[i-1] >= 2 {
val := inc[i-1] + 1 + dec[i+1]
if val > ans {
ans = val
}
}
}
if ans > n {
ans = n
}
fmt.Println(ans)
}
```