#include <bits/stdc++.h>
using namespace std;
int a[30010], v[30010], n;
vector<int> q1, q2;
bool check(vector<int> q) {
  int m = q.size();
  if (m == 0) return 0;
  if (m == 1 || m == 2) return 1;
  int d = q[1] - q[0];
  for (int i = 2; i < m; i++)
    if (q[i] - q[i - 1] != d) return 0;
  return 1;
}
void print() {
  for (int i = 0; i < q1.size(); i++) printf("%d ", q1[i]);
  puts("");
  for (int i = 0; i < q2.size(); i++) printf("%d ", q2[i]);
  puts("");
}
bool solve(int l, int r) {
  q1.clear();
  q2.clear();
  int p = a[l], d = a[r] - p, k = r;
  p += d;
  q1.push_back(a[l]);
  q1.push_back(a[r]);
  memset(v, 0, sizeof(v));
  v[l] = 1, v[r] = 1;
  for (int i = r + 1; i < n; i++)
    if (a[i] == p + d) v[i] = 1, p += d, q1.push_back(a[i]), k = i;
  for (int i = 0; i < n; i++)
    if (!v[i]) q2.push_back(a[i]);
  if (check(q2)) return print(), 1;
  v[k] = 0;
  q1.pop_back();
  q2.clear();
  for (int i = 0; i < n; i++)
    if (!v[i]) q2.push_back(a[i]);
  if (check(q2)) return print(), 1;
  return 0;
}
int main() {
  int i, j, k, m;
  while (~scanf("%d", &n)) {
    for (i = 0; i < n; i++) scanf("%d", &a[i]);
    if (n == 2) {
      printf("%d\n%d\n", a[0], a[1]);
      continue;
    }
    if (!solve(0, 1) && !solve(0, 2) && !solve(1, 2)) puts("No solution");
  }
  return 0;
}
