package main
import (
"bufio"
"os"
"strconv"
)
func main() {
scanner := bufio.NewScanner(os.Stdin)
scanner.Split(bufio.ScanWords)
writer := bufio.NewWriter(os.Stdout)
defer writer.Flush()
if !scanner.Scan() {
return
}
n, _ := strconv.Atoi(scanner.Text())
a := make([]int, n)
for i := 0; i < n; i++ {
scanner.Scan()
a[i], _ = strconv.Atoi(scanner.Text())
}
writer.WriteString("YES\n")
for i := 1; i <= n; i++ {
s := strconv.Itoa(i)
writer.WriteString(s + " " + s + "\n")
}
for i := 0; i < n; i++ {
d := a[i] / 2
target := (i + 1) + d
if target > n {
target = (i + 1) - d
}
if i > 0 {
writer.WriteByte(' ')
}
writer.WriteString(strconv.Itoa(target))
}
writer.WriteByte('\n')
}