#include <bits/stdc++.h>
using namespace std;
int n, al, bl, ff, i;
int s[30000], a[30000], b[30000];
set<int> vis[30000];
void dfs() {
  if (al == n) return;
  if (al + bl == n) {
    ff = 1;
    return;
  }
  if (al < 2 || s[al + bl] - a[al - 1] == a[al - 1] - a[al - 2]) {
    a[al] = s[al + bl];
    if (al > 1) vis[al + bl].insert(a[al] - a[al - 1]);
    al++;
    dfs();
    if (ff) return;
    al--;
  }
  if (bl < 2 ||
      s[al + bl] - b[bl - 1] == b[bl - 1] - b[bl - 2] &&
          (vis[al + bl].find(b[bl - 1] - b[bl - 2]) == vis[al + bl].end())) {
    b[bl] = s[al + bl];
    bl++;
    dfs();
    if (ff) return;
    bl--;
  }
}
int main() {
  scanf("%d", &n);
  for (i = 0; i < n; i++) scanf("%d", &s[i]);
  ff = al = bl = 0;
  dfs();
  if (ff) {
    for (i = 0; i < al; i++) printf("%d ", a[i]);
    printf("\n");
    for (i = 0; i < bl; i++) printf("%d ", b[i]);
    printf("\n");
  } else
    printf("No solution\n");
  return 0;
}
