#include <bits/stdc++.h>
using namespace std;
int a[30002], b[30002];
bool vis[30002];
int n;
void print() {
  for (int i = 0; i < n; i++)
    if (vis[i]) printf("%d ", a[i]);
  putchar('\n');
  for (int i = 0; i < n; i++)
    if (!vis[i]) printf("%d ", a[i]);
}
bool solve(int x, int y) {
  memset(vis, 0, sizeof(vis));
  vis[x] = vis[y] = 1;
  int d = a[y] - a[x];
  int nxt = a[y] + d;
  for (int i = 0; i < n; i++)
    if (a[i] == nxt) {
      vis[i] = 1;
      nxt += d;
    }
  int tot = 0;
  for (int i = 0; i < n; i++) {
    if (!vis[i]) b[tot++] = a[i];
  }
  if (tot < 3) {
    if (tot == 0) vis[n - 1] = 0;
    print();
    return 1;
  } else {
    bool ok = 1;
    d = b[1] - b[0];
    nxt = b[1] + d;
    for (int i = 2; i < tot; i++) {
      if (b[i] != nxt) {
        ok = 0;
        break;
      } else
        nxt += d;
    }
    if (ok) {
      print();
      return 1;
    } else {
      int cnt = n - 1;
      while (!vis[cnt]) cnt--;
      vis[cnt] = 0;
      tot = 0;
      for (int i = 0; i < n; i++)
        if (!vis[i]) b[tot++] = a[i];
      bool ok = 1;
      d = b[1] - b[0];
      nxt = b[1] + d;
      for (int i = 2; i < tot; i++) {
        if (b[i] != nxt) {
          ok = 0;
          break;
        } else
          nxt += d;
      }
      if (ok) {
        print();
        return 1;
      }
    }
  }
  return 0;
}
int main() {
  scanf("%d", &n);
  for (int i = 0; i < n; i++) scanf("%d", &a[i]);
  if (!solve(0, 1) && !solve(0, 2) && !solve(1, 2)) puts("No solution");
  return 0;
}
