package main
import (
"bufio"
"fmt"
"os"
)
func readInt(in *bufio.Reader) int {
n := 0
sign := 1
for {
c, err := in.ReadByte()
if err != nil {
return n * sign
}
if c >= '0' && c <= '9' {
n = int(c - '0')
break
}
if c == '-' {
sign = -1
}
}
for {
c, err := in.ReadByte()
if err != nil {
break
}
if c >= '0' && c <= '9' {
n = n*10 + int(c-'0')
} else {
break
}
}
return n * sign
}
func main() {
reader := bufio.NewReader(os.Stdin)
writer := bufio.NewWriter(os.Stdout)
defer writer.Flush()
n := readInt(reader)
a := make([]int, n+1)
var zeros []int
var negs []int
var poss []int
for i := 1; i <= n; i++ {
a[i] = readInt(reader)
if a[i] == 0 {
zeros = append(zeros, i)
} else if a[i] < 0 {
negs = append(negs, i)
} else {
poss = append(poss, i)
}
}
var ex []int
var in []int
ex = append(ex, zeros...)
if len(negs)%2 != 0 {
maxNegIdx := negs[0]
maxNegVal := a[negs[0]]
for _, idx := range negs {
if a[idx] > maxNegVal {
maxNegVal = a[idx]
maxNegIdx = idx
}
}
ex = append(ex, maxNegIdx)
for _, idx := range negs {
if idx != maxNegIdx {
in = append(in, idx)
}
}
} else {
in = append(in, negs...)
}
in = append(in, poss...)
if len(in) == 0 {
for i := 0; i < len(ex)-1; i++ {
fmt.Fprintf(writer, "1 %d %d\n", ex[i], ex[i+1])
}
} else {
if len(ex) > 0 {
for i := 0; i < len(ex)-1; i++ {
fmt.Fprintf(writer, "1 %d %d\n", ex[i], ex[i+1])
}
fmt.Fprintf(writer, "2 %d\n", ex[len(ex)-1])
}
for i := 0; i < len(in)-1; i++ {
fmt.Fprintf(writer, "1 %d %d\n", in[i], in[i+1])
}
}
}