← Home
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])
		}
	}
}