#include <bits/stdc++.h>
using namespace std;
const int maxn = 30005;
map<int, int> data;
int a[maxn], n;
int b[2][maxn];
bool use[maxn];
void check2() {
  int flag1 = 0, flag2 = 0;
  for (int i = 0; i < n; i++) {
    if (use[i]) continue;
    flag1 = 1;
    b[1][++b[1][0]] = a[i];
    for (int j = i + 1; j < n; j++) {
      if (use[j]) continue;
      flag2 = 1;
      b[1][++b[1][0]] = a[j];
      break;
    }
    break;
  }
  if (flag2) {
    int x = b[1][1], y = b[1][2], d = y - x, last = data[y];
    while (1) {
      y += d;
      if (data.find(y) == data.end()) break;
      int id = data[y];
      if (use[id]) break;
      if (last > id) break;
      b[1][++b[1][0]] = y;
      last = id;
    }
  }
}
bool check() {
  int x = b[0][1], y = b[0][2], d = y - x, last = data[y];
  while (1) {
    y += d;
    if (data.find(y) == data.end()) break;
    int id = data[y];
    if (last > id) break;
    b[0][++b[0][0]] = y;
    use[id] = 1;
    last = id;
  }
  check2();
  if (b[0][0] + b[1][0] == n)
    return 1;
  else {
    y = b[0][b[0][0]];
    use[data[y]] = 0;
    b[0][0]--;
    memset(b[1], 0, sizeof(b[1]));
    check2();
    if (b[0][0] + b[1][0] == n) return 1;
  }
  return 0;
}
void output() {
  if (b[0][0] && b[1][0]) {
    for (int i = 1; i <= b[0][0]; i++) printf("%d ", b[0][i]);
    printf("\n");
    for (int i = 1; i <= b[1][0]; i++) printf("%d ", b[1][i]);
    printf("\n");
  } else {
    for (int i = 1; i < b[0][0]; i++) printf("%d ", b[0][i]);
    printf("\n%d\n", b[0][b[0][0]]);
  }
}
int main() {
  scanf("%d", &n);
  for (int i = 0; i < n; i++) {
    scanf("%d", &a[i]);
    data[a[i]] = i;
  }
  b[0][++b[0][0]] = a[0];
  b[0][++b[0][0]] = a[1];
  use[0] = use[1] = 1;
  if (check())
    output();
  else {
    memset(use, 0, sizeof(use));
    memset(b, 0, sizeof(b));
    b[0][++b[0][0]] = a[0];
    b[0][++b[0][0]] = a[2];
    use[0] = use[2] = 1;
    if (check())
      output();
    else {
      memset(use, 0, sizeof(use));
      memset(b, 0, sizeof(b));
      b[0][++b[0][0]] = a[1];
      b[0][++b[0][0]] = a[2];
      use[1] = use[2] = 1;
      if (check())
        output();
      else
        printf("No solution\n");
    }
  }
  return 0;
}
