package main
import (
"bufio"
"fmt"
"os"
"sort"
"strconv"
"strings"
)
type Item struct {
val int
idx int
}
func main() {
in := bufio.NewReaderSize(os.Stdin, 1<<20)
out := bufio.NewWriterSize(os.Stdout, 1<<20)
defer out.Flush()
var n int
fmt.Fscan(in, &n)
items := make([]Item, n)
for i := 0; i < n; i++ {
fmt.Fscan(in, &items[i].val)
items[i].idx = i
}
sort.Slice(items, func(i, j int) bool {
if items[i].val != items[j].val {
return items[i].val < items[j].val
}
return items[i].idx < items[j].idx
})
rank := make([]int, n)
pos := make([]int, n+1)
for i, it := range items {
r := i + 1
rank[it.idx] = r
pos[r] = it.idx
}
res := make([][2]int, 0)
for i := 0; i < n; i++ {
for r := rank[i] - 1; r >= 1; r-- {
j := pos[r]
if j > i {
res = append(res, [2]int{i + 1, j + 1})
}
}
}
var sb strings.Builder
sb.Grow(len(res)*10 + 20)
sb.WriteString(strconv.Itoa(len(res)))
sb.WriteByte('\n')
for _, p := range res {
sb.WriteString(strconv.Itoa(p[0]))
sb.WriteByte(' ')
sb.WriteString(strconv.Itoa(p[1]))
sb.WriteByte('\n')
}
out.WriteString(sb.String())
}