#include <bits/stdc++.h>
using namespace std;
const int INF = 2147483647;
const long long LLINF = 9223372036854775807LL;
const int maxn = 30010;
int a[maxn] = {};
int used[maxn] = {};
int main() {
  int n;
  scanf("%d", &n);
  for (int i = 0; i < n; ++i) scanf("%d", &a[i]);
  vector<int> ans1, ans2;
  if (n == 2) {
    ans1.push_back(a[0]);
    ans2.push_back(a[1]);
    goto ooo;
  }
  if (n == 3) {
    ans1.push_back(a[0]);
    ans1.push_back(a[1]);
    ans2.push_back(a[2]);
    goto ooo;
  }
  if (n == 4) {
    ans1.push_back(a[0]);
    ans1.push_back(a[1]);
    ans2.push_back(a[2]);
    ans2.push_back(a[3]);
    goto ooo;
  }
  for (int i = 0; i < 5; ++i)
    for (int j = i + 1; j < 5; ++j)
      for (int k = j + 1; k < 5; ++k) {
        if (a[j] - a[i] == a[k] - a[j]) {
          memset(used, 0, sizeof(used));
          used[i] = 1;
          used[j] = 1;
          used[k] = 1;
          int d = a[j] - a[i];
          int cur = a[k] + d;
          int cused = 3;
          int lused = k;
          for (int t = k + 1; t < n; ++t) {
            if (a[t] == cur) {
              used[t] = 1;
              lused = t;
              cused++;
              cur += d;
            }
          }
          int pppp = 2;
          while (pppp--) {
            if (pppp == 0) used[lused] = 0;
            bool ok = true;
            int p1 = -1;
            int p2 = -1;
            int curd = 0;
            for (int t = 0; t < n; ++t) {
              if (used[t]) continue;
              int ccc = a[i];
              if (curd == 0) {
                if (p2 == -1) {
                  p2 = p1;
                  p1 = t;
                  if (p2 != -1) {
                    curd = a[p1] - a[p2];
                  }
                }
              } else {
                if (a[t] - a[p1] != curd) {
                  ok = false;
                  break;
                } else {
                  p1 = t;
                }
              }
            }
            if (ok) {
              if (cused == n) used[0] = 0;
              for (int t = 0; t < n; ++t) {
                if (used[t])
                  ans1.push_back(a[t]);
                else
                  ans2.push_back(a[t]);
              }
              goto ooo;
            }
          }
        }
      }
  printf("No solution");
  return 0;
ooo:
  for (int i = 0; i < ans1.size(); ++i) printf("%d ", ans1[i]);
  printf("\n");
  for (int i = 0; i < ans2.size(); ++i) printf("%d ", ans2[i]);
  return 0;
}
