#include <bits/stdc++.h>
using namespace std;
const double pi = acos(-1.0);
const double eps = 1e-11;
const int inf = 0x7FFFFFFF;
template <class T>
inline void checkmin(T &a, T b) {
  if (b < a) a = b;
}
template <class T>
inline void checkmax(T &a, T b) {
  if (b > a) a = b;
}
template <class T>
inline T sqr(T x) {
  return x * x;
}
template <class T>
void show(T a, int n) {
  for (int i = 0; i < n; ++i) cout << a[i] << ' ';
  cout << endl;
}
template <class T>
void show(T a, int r, int l) {
  for (int i = 0; i < r; ++i) show(a[i], l);
  cout << endl;
}
int a[50000], n;
int c1, c2, f1, f2;
int h[2][50000], n1, n2;
bool dfs(int t) {
  while (t < n) {
    if (a[t] - h[0][n1 - 1] == c1) {
      if (f2 && a[t] - h[1][n2 - 1] == c2) {
        int j;
        h[0][n1++] = a[t];
        for (j = t + 1; j < n; j++)
          if (a[j] - a[j - 1] == c1)
            ;
          else
            break;
        if (j == n) {
          for (j = t + 1; j < n; j++) h[0][n1++] = a[j];
          return true;
        }
        n1--;
        h[1][n2++] = a[t];
        for (j = t + 1; j < n; j++)
          if (a[j] - a[j - 1] == c2)
            ;
          else
            break;
        if (j == n) {
          for (j = t + 1; j < n; j++) h[1][n2++] = a[j];
          return true;
        }
        return false;
      } else {
        h[0][n1++] = a[t];
      }
    } else if (!f2) {
      if (n2 == 0) {
        h[1][n2++] = a[t];
      } else {
        c2 = a[t] - h[1][n2 - 1];
        f2 = true;
        h[1][n2++] = a[t];
      }
    } else if (a[t] - h[1][n2 - 1] == c2) {
      h[1][n2++] = a[t];
    } else
      return false;
    t++;
  }
  if (n2 == 0) {
    h[1][n2++] = h[0][n1 - 1];
    n1--;
  }
  return true;
}
int main() {
  while (cin >> n) {
    for (int i = 0; i < n; i++) scanf("%d", a + i);
    if (n == 2) {
      cout << a[0] << endl << a[1] << endl;
      return 0;
    }
    bool flag = false;
    if (!flag) {
      h[0][0] = a[0], h[0][1] = a[1];
      n1 = 2, n2 = 0;
      c1 = a[1] - a[0];
      f1 = true, f2 = false;
      flag = dfs(2);
    }
    if (!flag) {
      h[0][0] = a[0], h[0][1] = a[2];
      h[1][0] = a[1];
      n1 = 2, n2 = 1;
      c1 = a[2] - a[0];
      f1 = true, f2 = false;
      flag = dfs(3);
    }
    if (!flag) {
      h[0][0] = a[1], h[0][1] = a[2];
      h[1][0] = a[0];
      n1 = 2, n2 = 1;
      c1 = a[2] - a[1];
      f1 = true, f2 = false;
      flag = dfs(3);
    }
    if (flag) {
      for (int i = 0; i < n1; i++) cout << h[0][i] << ' ';
      cout << endl;
      for (int i = 0; i < n2; i++) cout << h[1][i] << ' ';
      cout << endl;
    } else
      printf("No solution\n");
  }
  return 0;
}
