#include <bits/stdc++.h>
using namespace std;
const int mxn = 30010, inf = 1010000000;
int n, a[mxn], sum;
bool v[mxn];
bool kk() {
  int i, l2 = 0, d2 = inf;
  if (n - sum <= 2) return 1;
  for (i = 1; i <= n; i++)
    if (!v[i]) {
      if (!l2)
        l2 = i;
      else {
        if (d2 == inf) {
          d2 = a[i] - a[l2];
          l2 = i;
        } else {
          if (a[l2] + d2 != a[i]) return 0;
          l2 = i;
        }
      }
    }
  return 1;
}
void pr() {
  int i;
  for (i = 1; i <= n; i++)
    if (v[i]) printf("%d ", a[i]);
  printf("\n");
  for (i = 1; i <= n; i++)
    if (!v[i]) printf("%d ", a[i]);
  printf("\n");
}
bool ca(int x) {
  int i, d, l;
  memset(v, 0, sizeof(v));
  v[1] = v[x] = 1;
  d = a[x] - a[1];
  l = x;
  sum = 2;
  for (i = x + 1; i <= n; i++)
    if (a[l] + d == a[i]) {
      v[i] = 1;
      sum++;
      l = i;
    }
  if (sum == n) v[n] = 0;
  if (kk()) {
    pr();
    return 1;
  }
  v[l] = 0;
  if (kk()) {
    pr();
    return 1;
  }
  return 0;
}
bool solve() {
  memset(v, 0, sizeof(v));
  v[1] = 1;
  sum = 1;
  if (kk()) {
    pr();
    return 1;
  }
  if (ca(2)) return 1;
  if (ca(3)) return 1;
  int d2 = a[3] - a[2];
  int i;
  for (i = 3; i <= n && a[i - 1] + d2 == a[i]; i++)
    ;
  if (i > n) {
    memset(v, 0, sizeof(v));
    v[1] = 1;
    pr();
    return 1;
  }
  if (ca(i)) return 1;
  if (ca(i - 1)) return 1;
  return 0;
}
int main() {
  int i;
  scanf("%d", &n);
  for (i = 1; i <= n; i++) scanf("%d", &a[i]);
  bool ok = solve();
  if (!ok) printf("No solution\n");
  return 0;
}
