#include long long gcd (long long a, long long b) { if (b <= 0LL) { return a; } return gcd(b, a%b); } int main () { int n = 0; long long a[200000] = {}; int res = 0; res = scanf("%d", &n); for (int i = 0; i < n; i++) { res = scanf("%lld", a+i); } if (gcd(a[0], a[1]) != 1LL || a[0]*a[1] == 0LL) { printf("0\n"); printf("1 2\n"); n--; while (n > 1) { printf("1 %d\n", n); n--; } } else if (n <= 2) { printf("%lld\n", (a[0]-1LL)*(a[1]-1LL)); printf("1 2\n"); } else if (n > 3) { printf("0\n"); if (a[0]%2LL == 0LL && a[2]%2LL == 0LL) { printf("1 3\n"); n--; } else if (a[0]%2LL == 0LL || (a[1]%2LL == 0LL && a[2]%2LL == 0LL)) { printf("2 3\n"); n--; } else if (a[1]%2LL == 0LL) { printf("1 3\n"); n--; } else if (a[2]%2LL == 0LL) { printf("1 2\n"); n--; } else { printf("1 2\n"); n--; printf("1 2\n"); n--; printf("%d %d\n", n-1, n); n--; } while (n > 1) { printf("1 %d\n", n); n--; } } else if (gcd((a[0]-1LL)*(a[1]-1LL), a[2]) != 1LL) { printf("0\n"); printf("1 2\n"); printf("1 2\n"); } else if (gcd(a[0], a[2]) != 1LL || a[2] == 0LL || gcd((a[0]-1LL)*(a[2]-1LL), a[1]) != 1LL) { printf("0\n"); printf("1 3\n"); printf("1 2\n"); } else if (gcd((a[1]-1LL)*(a[2]-1LL), a[0]) != 1LL) { printf("0\n"); printf("2 3\n"); printf("1 2\n"); } else { long long max = 0LL; int argmax = 0; for (int i = 0; i < n; i++) { if (max < a[i]) { max = a[i]; argmax = i; } } printf("%lld\n",(a[0]-1LL)*(a[1]-1LL)*(a[2]-1LL)-max+1LL); printf("%d %d\n", (argmax+1)%3+1, (argmax+2)%3+1); printf("1 2\n"); } return 0; }