#include <bits/stdc++.h>
using namespace std;
const int N = 30300;
int n;
int nums[N];
int ulti[N];
vector<int> one, two;
void print() {
  for (int a : one) {
    cout << a << ' ';
  }
  cout << endl;
  for (int a : two) {
    cout << a << ' ';
  }
  exit(0);
}
bool bt(int ini, int razao) {
  for (int i = ini + 1; i < n; i++) {
    if (nums[i] - nums[i - 1] != razao) {
      return 0;
    }
  }
  return 1;
}
bool check() {
  int on = one.size() + two.size();
  int ro = one[1] - one[0];
  int rt = -1000000000;
  int oo = 2, ot = two.size();
  bool posso = 1;
  int u = -1;
  for (int i = on; i < n && posso; i++) {
    u = i;
    if (nums[i] - one.back() == ro) {
      one.push_back(nums[i]);
      oo++;
      ulti[i] = 1;
    } else {
      if (rt == -1000000000) {
        two.push_back(nums[i]);
        ot++;
        if (ot >= 2) {
          rt = two[1] - two[0];
        }
        ulti[i] = 2;
      } else if (nums[i] - two.back() == rt) {
        two.push_back(nums[i]);
        ot++;
        ulti[i] = 2;
      } else {
        posso = 0;
      }
    }
  }
  if (posso) {
    if (two.empty()) {
      two.push_back(one.back());
      one.pop_back();
    }
    return 1;
  }
  u--;
  int ult = ulti[u];
  if (ult == 1) {
    if (one.size() == 2) {
      one.pop_back();
      u--;
      ult = ulti[u];
    }
  } else {
    if (two.size() == 2) {
      two.pop_back();
      u--;
      ult = ulti[u];
    }
  }
  if (ult == -1)
    return 0;
  else if (ult == 1) {
    int el = one.back();
    one.pop_back();
    while (u < n && (el - two.back() == rt || two.size() == 1)) {
      u++;
      two.push_back(el);
      el = nums[u];
      rt = two[two.size() - 1] - two[two.size() - 2];
    }
    return u == n;
  } else {
    int el = two.back();
    two.pop_back();
    while (u < n && (el - one.back() == ro || one.size() == 1)) {
      u++;
      one.push_back(el);
      el = nums[u];
      ro = one[one.size() - 1] - one[one.size() - 2];
    }
    return u == n;
  }
  return 1;
}
int main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  cin >> n;
  for (int i = 0; i < n; i++) {
    cin >> nums[i];
  }
  if (n == 2) {
    cout << nums[0] << endl << nums[1];
    return 0;
  }
  one.push_back(nums[0]);
  one.push_back(nums[1]);
  if (check()) {
    print();
  } else {
    one.clear();
    two.clear();
    one.push_back(nums[0]);
    two.push_back(nums[1]);
    one.push_back(nums[2]);
    if (check()) {
      print();
    } else {
      one.clear();
      two.clear();
      two.push_back(nums[0]);
      one.push_back(nums[1]);
      one.push_back(nums[2]);
      if (check()) {
        print();
      }
    }
  }
  cout << "No solution";
  return 0;
}
