#include <bits/stdc++.h>
using namespace std;
int n;
vector<int> a;
bool check(vector<int> &b) {
  if (b.size() <= 1) return !b.empty();
  int d = a[b[1]] - a[b[0]];
  for (int i = 1; i < b.size(); ++i) {
    if (d != a[b[i]] - a[b[i - 1]]) return false;
  }
  return true;
}
bool solve(int o, int p) {
  vector<int> fir, sec;
  fir.push_back(o);
  fir.push_back(p);
  if (p == 2) {
    sec.push_back(1 - o);
  }
  for (int i = p + 1; i < n; ++i) {
    if (a[i] == a[fir[1]] - a[fir[0]] + a[*fir.rbegin()]) {
      fir.push_back(i);
    } else {
      sec.push_back(i);
    }
  }
  if (check(fir) && check(sec)) {
    for (auto &i : fir) {
      cout << a[i] << " ";
    }
    cout << endl;
    for (auto &i : sec) {
      cout << a[i] << " ";
    }
    cout << endl;
    return true;
  }
  sec.push_back(*fir.rbegin());
  fir.pop_back();
  sort(sec.begin(), sec.end());
  if (check(fir) && check(sec)) {
    for (auto &i : fir) {
      cout << a[i] << " ";
    }
    cout << endl;
    for (auto &i : sec) {
      cout << a[i] << " ";
    }
    cout << endl;
    return true;
  }
  return false;
}
int main() {
  scanf("%d", &n);
  a.resize(n);
  for (int i = 0; i < n; ++i) {
    scanf("%d", &a[i]);
  }
  if (n == 2) {
    cout << a[0] << endl << a[1] << endl;
  } else {
    if (solve(0, 1)) return 0;
    if (solve(0, 2)) return 0;
    if (solve(1, 2)) return 0;
    puts("No solution\n");
  }
  return 0;
}
