#include <bits/stdc++.h>
using namespace std;
int N, last;
int ar[30002];
int mark[30002];
set<int> c[3];
int comp(const void *pa, const void *pb) {
  int *a = (int *)pa;
  int *b = (int *)pb;
  return (*a > *b) - (*b > *a);
}
void print() {
  int c = 0;
  for (int i = 0; i < N; i++)
    if (!mark[i]) {
      if (c == N - 1) {
        mark[c] = 1;
        break;
      }
      cout << ar[i] << " ";
      c++;
    }
  if (!c) {
    cout << ar[0];
    mark[0] = 0;
  }
  cout << endl;
  for (int i = 0; i < N; i++)
    if (mark[i]) cout << ar[i] << " ";
  cout << endl;
}
bool c1() {
  int diff = ar[1] - ar[0];
  int prev = 1;
  mark[0] = mark[1] = 1;
  for (int i = 2; i < N; i++) {
    if (ar[i] - ar[prev] == diff) {
      mark[i] = 1;
      prev = i;
      last = i;
      continue;
    }
  }
  int f;
  for (f = 2; mark[f]; f++)
    ;
  int s = f + 1;
  for (; mark[s]; s++)
    ;
  int diff2 = ar[s] - ar[f];
  prev = s;
  for (int i = s + 1; i < N; i++)
    if (!mark[i]) {
      if (ar[i] - ar[prev] != diff2) {
        if (ar[i] - ar[prev] == diff2 << 1 && ar[i] - diff2 == ar[last])
          mark[last] = 0;
        else if (ar[i] - ar[prev] == ar[prev] - ar[last] &&
                 ar[last] - ar[f] == ar[prev] - ar[last]) {
          diff2 = ar[i] - ar[prev];
          mark[last] = 0;
        } else
          return false;
      }
      prev = i;
    }
  print();
  return true;
}
bool c2() {
  int diff = ar[2] - ar[0];
  int prev = 2;
  for (int i = 0; i < N; i++) mark[i] = 0;
  mark[0] = mark[2] = 1;
  for (int i = 3; i < N; i++) {
    if (ar[i] - ar[prev] == diff) {
      mark[i] = 1;
      prev = i;
      last = i;
      continue;
    }
  }
  int f = 1;
  int s = 3;
  for (; mark[s]; s++)
    ;
  int diff2 = ar[s] - ar[f];
  prev = s;
  for (int i = s + 1; i < N; i++)
    if (!mark[i]) {
      if (ar[i] - ar[prev] != diff2) {
        if (ar[i] - ar[prev] == diff2 << 1 && ar[i] - diff2 == ar[last])
          mark[last] = 0;
        else if (ar[i] - ar[prev] == ar[prev] - ar[last] &&
                 ar[last] - ar[f] == ar[prev] - ar[last]) {
          diff2 = ar[i] - ar[prev];
          mark[last] = 0;
        } else
          return false;
      }
      prev = i;
    }
  print();
  return true;
}
bool c3() {
  int diff = ar[2] - ar[1];
  int prev = 2;
  for (int i = 0; i < N; i++) mark[i] = 0;
  mark[1] = mark[2] = 1;
  for (int i = 3; i < N; i++) {
    if (ar[i] - ar[prev] == diff) {
      mark[i] = 1;
      prev = i;
      last = i;
      continue;
    }
  }
  int f = 0;
  int s = 3;
  for (; mark[s]; s++)
    ;
  int diff2 = ar[s] - ar[f];
  prev = s;
  for (int i = s + 1; i < N; i++)
    if (!mark[i]) {
      if (ar[i] - ar[prev] != diff2) {
        if (ar[i] - ar[prev] == diff2 << 1 && ar[i] - diff2 == ar[last])
          mark[last] = 0;
        else if (ar[i] - ar[prev] == ar[prev] - ar[last] &&
                 ar[last] - ar[f] == ar[prev] - ar[last]) {
          diff2 = ar[i] - ar[prev];
          mark[last] = 0;
        } else
          return false;
      }
      prev = i;
    }
  print();
  return true;
}
int main() {
  cin >> N;
  for (int i = 0; i < N; i++) {
    cin >> ar[i];
    c[0].insert(ar[i]);
    c[1].insert(ar[i]);
    c[2].insert(ar[i]);
  }
  if (!c1())
    if (!c2())
      if (!c3()) cout << "No solution" << endl;
  return 0;
}
