#include <bits/stdc++.h>
using namespace std;
int ar[30001], n;
int X[30002];
vector<int> v1, v2;
void print() {
  int i;
  for ((i) = 0; (i) < (v1.size()); (i)++) cout << v1[i] << " ";
  cout << endl;
  for ((i) = 0; (i) < (v2.size()); (i)++) cout << v2[i] << " ";
  cout << endl;
  exit(0);
}
bool chek() {
  int i, d;
  v1.clear();
  v2.clear();
  for ((i) = 0; (i) < (n); (i)++)
    if (X[i])
      v1.push_back(ar[i]);
    else
      v2.push_back(ar[i]);
  if (v2.size() == 0) return false;
  if (v2.size() <= 2) return true;
  int next = v2[0];
  d = v2[1] - v2[0];
  for ((i) = 0; (i) < (v2.size()); (i)++) {
    if (v2[i] != next) return false;
    next += d;
  }
  return true;
}
void split(int a, int b) {
  int d = b - a;
  int next = a;
  int i;
  memset(X, 0, sizeof X);
  for ((i) = 0; (i) < (n); (i)++)
    if (next == ar[i]) X[i] = 1, next += d;
  if (chek()) print();
  i = n - 1;
  while (X[i] == 0) i--;
  X[i] = 0;
  if (chek()) print();
}
int main() {
  int i;
  scanf("%d", &n);
  for ((i) = 0; (i) < (n); (i)++) scanf("%d", &ar[i]);
  split(ar[0], ar[1]);
  split(ar[0], ar[2]);
  split(ar[1], ar[2]);
  printf("No solution\n");
  return 0;
}
