#include <bits/stdc++.h>
int prog(int v[], int n);
void imprimir(int vec[], int n);
int busqueda(int x, int y, int v[], int n);
int main() {
  int i, n, b = 0;
  int f;
  scanf("%d", &n);
  int v[n];
  for (i = 0; i < n; i++) {
    scanf("%d", &v[i]);
  }
  if (prog(v, n)) {
    imprimir(v, n - 1);
    printf("\n%d", v[n - 1]);
    b = 1;
  } else {
    if (busqueda(v[0], v[1], v, n)) {
      b = 1;
    } else if (busqueda(v[0], v[2], v, n)) {
      b = 1;
    } else if (busqueda(v[1], v[2], v, n)) {
      b = 1;
    }
  }
  if (b == 0) {
    printf("No solution");
  }
  return 0;
}
int prog(int v[], int n) {
  int d, a, i;
  if (n > 2) {
    d = v[1] - v[0];
    a = v[1] + d;
    for (i = 2; i < n; i++) {
      if (a != v[i]) {
        return 0;
      }
      a = a + d;
    }
  }
  return 1;
}
int busqueda(int x, int y, int v[], int n) {
  int i, j = 0, k = 0, d, a, f;
  int pri[n], seg[n];
  d = y - x;
  a = x;
  for (i = 0; i < n; i++) {
    if (a == v[i]) {
      pri[j] = v[i];
      j++;
      a = v[i] + d;
    } else {
      seg[k] = v[i];
      k++;
    }
  }
  if (prog(seg, k)) {
    imprimir(pri, j);
    printf("\n");
    imprimir(seg, k);
  } else {
    int p, b = -1;
    if (seg[1] - seg[0] != seg[2] - seg[1] &&
        pri[j - 1] - seg[0] == seg[1] - pri[j - 1]) {
      p = pri[j - 1] - seg[0];
    } else {
      p = seg[1] - seg[0];
    }
    a = seg[0];
    for (i = 0; i < k; i++) {
      if (a == seg[i]) {
        a = a + p;
      } else if (pri[j - 1] == a) {
        a = a + p;
        b = i;
        j--;
        i--;
      } else {
        return 0;
      }
    }
    imprimir(pri, j);
    printf("\n");
    imprimir(seg, b);
    printf(" %d ", pri[j]);
    for (i = b; i < k; i++) {
      printf("%d", seg[i]);
      if (i != k - 1) {
        printf(" ");
      }
    }
  }
  return 1;
}
void imprimir(int vec[], int n) {
  int i;
  for (i = 0; i < n; i++) {
    printf("%d", vec[i]);
    if (i != n - 1) {
      printf(" ");
    }
  }
}
