#include <bits/stdc++.h>
using namespace std;
const int maxN = 30000 + 2;
const int mod = 1000 * 1000 * 1000 + 7;
int a[maxN];
int n;
int mark[maxN];
bool check3() {
  int fl = 1;
  for (int i = 1; i < n; i++)
    if (a[i] - a[i - 1] != a[1] - a[0]) {
      fl = 0;
      break;
    }
  if (fl) {
    for (int i = 0; i < n - 1; i++) cout << a[i] << ' ';
    cout << endl;
    cout << a[n - 1] << endl;
    return true;
  }
  return false;
}
void print() {
  for (int i = 0; i < n; i++)
    if (!mark[i]) cout << a[i] << ' ';
  cout << endl;
  for (int i = 0; i < n; i++)
    if (mark[i]) cout << a[i] << ' ';
  cout << endl;
}
bool make() {
  int fi = 0;
  for (int i = 0; i < n; i++)
    if (!mark[i]) {
      fi = i;
      break;
    }
  int st = fi;
  int f = 0, d = 0;
  for (int i = fi + 1; i < n; i++) {
    if (mark[i]) continue;
    if (f == 0) {
      d = a[i] - a[st];
      st = i;
      f = 1;
      continue;
    }
    if (a[i] - a[st] == d) {
      st = i;
      continue;
    }
    int tmp = 0;
    for (int j = i; j > st; j--) {
      if (mark[j] && a[i] - a[j] == d && a[j] - a[st] == d) {
        for (int k = j; k < n; k++)
          if (mark[k]) mark[k] = 0;
        tmp = 1;
        st = j;
        i = j;
        break;
      }
    }
    if (tmp == 1) continue;
    for (int j = fi; j < n; j++)
      if (mark[j] && 2 * (a[j] - a[fi]) == d) {
        mark[j] = 0;
        tmp = 1;
        for (int k = j; k < n; k++)
          if (mark[k]) mark[k] = 0;
        d /= 2;
        break;
      }
    if (tmp == 1) {
      st = fi;
      i = fi;
      continue;
    }
    return false;
  }
  return true;
}
bool check0() {
  int d1 = a[1] - a[0];
  mark[0] = mark[1] = 1;
  int st = 1;
  for (int i = 2; i < n; i++)
    if (a[i] - a[st] == d1) {
      mark[i] = 1;
      st = i;
    }
  if (!make()) return false;
  print();
  return true;
}
bool check1() {
  memset(mark, 0, sizeof mark);
  int d1 = a[2] - a[0];
  mark[0] = mark[2] = 1;
  int st = 2;
  for (int i = 3; i < n; i++)
    if (a[i] - a[st] == d1) {
      mark[i] = 1;
      st = i;
    }
  if (!make()) return false;
  print();
  return true;
}
bool check2() {
  memset(mark, 0, sizeof mark);
  int d1 = a[2] - a[1];
  mark[1] = mark[2] = 1;
  int st = 2;
  for (int i = 3; i < n; i++)
    if (a[i] - a[st] == d1) {
      mark[i] = 1;
      st = i;
    }
  if (!make()) return false;
  print();
  return true;
}
int main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  cin >> n;
  for (int i = 0; i < n; i++) cin >> a[i];
  if (check3()) return 0;
  if (check0()) return 0;
  if (check1()) return 0;
  if (check2()) return 0;
  cout << "No solution" << endl;
  return 0;
}
