#include <bits/stdc++.h>
using namespace std;
bool sip;
int A[30005], U[30005], D[30005], hay1, hay2, ctos, suma, sig;
int main() {
  scanf("%d", &ctos);
  for (int i = 1; i <= ctos; i++) {
    scanf("%d", &A[i]);
  }
  if (ctos == 2) {
    printf("%d\n%d\n", A[1], A[2]);
    return 0;
  }
  if (ctos == 3) {
    printf("%d %d\n%d\n", A[1], A[2], A[3]);
    return 0;
  }
  sip = true;
  U[1] = A[1];
  U[2] = A[2];
  hay1 = 2;
  hay2 = 0;
  suma = A[2] - A[1];
  sig = A[2] + suma;
  for (int i = 3; i <= ctos; i++) {
    if (A[i] == sig and hay1 != ctos - 1) {
      ++hay1;
      U[hay1] = A[i];
      sig += suma;
    } else {
      ++hay2;
      D[hay2] = A[i];
      if (hay2 > 2 and D[hay2] - D[hay2 - 1] != D[2] - D[1]) {
        sip = false;
      }
    }
  }
  if (sip) {
    for (int i = 1; i <= hay1; i++) {
      printf("%d ", U[i]);
    }
    printf("\n");
    for (int i = 1; i <= hay2; i++) {
      printf("%d ", D[i]);
    }
    printf("\n");
    return 0;
  }
  sip = true;
  U[1] = A[1];
  U[2] = A[3];
  hay1 = 2;
  D[1] = A[2];
  hay2 = 1;
  suma = A[3] - A[1];
  sig = A[3] + suma;
  for (int i = 4; i <= ctos; i++) {
    if (A[i] == sig and hay1 != ctos - 1) {
      ++hay1;
      U[hay1] = A[i];
      sig += suma;
    } else {
      ++hay2;
      D[hay2] = A[i];
      if (hay2 > 2 and D[hay2] - D[hay2 - 1] != D[2] - D[1]) {
        sip = false;
      }
    }
  }
  if (sip) {
    for (int i = 1; i <= hay1; i++) {
      printf("%d ", U[i]);
    }
    printf("\n");
    for (int i = 1; i <= hay2; i++) {
      printf("%d ", D[i]);
    }
    printf("\n");
    return 0;
  }
  sip = true;
  U[1] = A[2];
  U[2] = A[3];
  hay1 = 2;
  D[1] = A[1];
  hay2 = 1;
  suma = A[3] - A[2];
  sig = A[3] + suma;
  for (int i = 4; i <= ctos; i++) {
    if (A[i] == sig and hay1 != ctos - 1) {
      ++hay1;
      U[hay1] = A[i];
      sig += suma;
    } else {
      ++hay2;
      D[hay2] = A[i];
      if (hay2 > 2 and D[hay2] - D[hay2 - 1] != D[2] - D[1]) {
        sip = false;
      }
    }
  }
  if (sip) {
    for (int i = 1; i <= hay1; i++) {
      printf("%d ", U[i]);
    }
    printf("\n");
    for (int i = 1; i <= hay2; i++) {
      printf("%d ", D[i]);
    }
    printf("\n");
    return 0;
  }
  sip = true;
  U[1] = A[ctos];
  U[2] = A[ctos - 1];
  hay1 = 2;
  hay2 = 0;
  suma = A[ctos - 1] - A[ctos];
  sig = A[ctos - 1] + suma;
  for (int i = ctos - 2; i > 0; i--) {
    if (A[i] == sig and hay1 != ctos - 1) {
      ++hay1;
      U[hay1] = A[i];
      sig += suma;
    } else {
      ++hay2;
      D[hay2] = A[i];
      if (hay2 > 2 and D[hay2] - D[hay2 - 1] != D[2] - D[1]) {
        sip = false;
      }
    }
  }
  if (sip) {
    for (int i = hay1; i > 0; i--) {
      printf("%d ", U[i]);
    }
    printf("\n");
    for (int i = hay2; i > 0; i--) {
      printf("%d ", D[i]);
    }
    printf("\n");
    return 0;
  }
  printf("No solution\n");
  return 0;
}
