#include <bits/stdc++.h>
using namespace std;
int a[30005], n;
bool g2[30005];
void group(int x1, int x2) {
  vector<int> g1{a[x1], a[x2]};
  memset(g2, 0, sizeof g2);
  int d1 = abs(a[x2] - a[x1]);
  int last2id = -1, last1id = x2;
  for (int i = 0; i < n; ++i) {
    if (i == x1 || i == x2) continue;
    if (abs(a[i] - a[last1id]) == d1) {
      g1.push_back(a[last1id = i]);
    } else {
      if (last2id == -1) last2id = i;
      g2[i] = true;
    }
  }
  unordered_set<int> d2;
  cerr << ">>> "
          "last1id"
          "\t = "
       << last1id << endl;
  bool zz = true;
  int ls2 = last2id;
  for (int i = 0; i < n && zz; ++i) {
    if (!g2[i] || last2id == i) continue;
    if (d2.empty())
      d2.insert(abs(a[last2id] - a[i]));
    else if (abs(a[last2id] - a[i]) != *d2.begin())
      zz = false, d2.clear();
    last2id = i;
  }
  if (!zz) {
    g2[last1id] ^= 1;
    g1.pop_back();
    last2id = ls2;
    for (int i = 0; i < n; ++i) {
      if (!g2[i] || last2id == i) continue;
      if (d2.empty())
        d2.insert(abs(a[last2id] - a[i]));
      else if (abs(a[last2id] - a[i]) != *d2.begin())
        return;
      last2id = i;
    }
  }
  for (int i = 0; i <= 1; ++i) {
    int cnt = 0;
    for (int j = 0; j < n; ++j) {
      if (cnt == n - 1) cout << endl;
      if (i == g2[j]) cout << a[j] << ' ', ++cnt;
    }
    cout << endl;
  }
  exit(0);
}
int main() {
  cin.tie(0), cout.tie(0), ios::sync_with_stdio(0);
  cin >> n;
  for (int i = 0; i < n; ++i) cin >> a[i];
  if (n == 2) cout << a[0] << endl << a[1] << endl, exit(0);
  group(0, 1), group(0, 2), group(1, 2);
  cout << "No solution\n";
}
