#include <bits/stdc++.h>
using namespace std;
const int maxn = 30010;
int n, a[maxn], b[maxn], nb, c[maxn], nc, d;
int first, last;
bool yes, use[maxn];
int main() {
  while (scanf("%d", &n) == 1) {
    for (int i = 1; i <= n; i++) scanf("%d", &a[i]);
    yes = 0;
    memset(use, 0, sizeof(use));
    b[1] = a[1];
    b[2] = a[2];
    nb = 2;
    d = b[2] - b[1];
    use[1] = use[2] = 1;
    first = 1;
    last = 2;
    for (int i = 3; i <= n; i++) {
      if (a[i] - b[nb] == d) {
        b[++nb] = a[i];
        use[i] = 1;
        last = i;
      }
    }
    nc = 0;
    for (int i = 1; i <= n; i++)
      if (!use[i]) c[++nc] = a[i];
    if (nc <= 2) {
      yes = 1;
      if (nc == 0) c[++nc] = b[nb--];
    } else {
      yes = 1;
      d = c[2] - c[1];
      for (int i = 3; i <= nc; i++)
        if (c[i] - c[i - 1] != d) {
          yes = 0;
          break;
        }
    }
    if (yes) {
      for (int i = 1; i <= nb; i++) printf("%d ", b[i]);
      puts("");
      for (int i = 1; i <= nc; i++) printf("%d ", c[i]);
      puts("");
      continue;
    }
    use[first] = 0;
    nc = 0;
    for (int i = 1; i <= n; i++)
      if (!use[i]) c[++nc] = a[i];
    if (nc <= 2) {
      yes = 1;
      if (nc == 0) c[++nc] = b[nb--];
    } else {
      yes = 1;
      d = c[2] - c[1];
      for (int i = 3; i <= nc; i++)
        if (c[i] - c[i - 1] != d) {
          yes = 0;
          break;
        }
    }
    if (yes) {
      for (int i = 2; i <= nb; i++) printf("%d ", b[i]);
      puts("");
      for (int i = 1; i <= nc; i++) printf("%d ", c[i]);
      puts("");
      continue;
    }
    use[first] = 1;
    use[last] = 0;
    nc = 0;
    for (int i = 1; i <= n; i++)
      if (!use[i]) c[++nc] = a[i];
    if (nc <= 2) {
      yes = 1;
      if (nc == 0) c[++nc] = b[nb--];
    } else {
      yes = 1;
      d = c[2] - c[1];
      for (int i = 3; i <= nc; i++)
        if (c[i] - c[i - 1] != d) {
          yes = 0;
          break;
        }
    }
    if (yes) {
      for (int i = 1; i < nb; i++) printf("%d ", b[i]);
      puts("");
      for (int i = 1; i <= nc; i++) printf("%d ", c[i]);
      puts("");
      continue;
    }
    memset(use, 0, sizeof(use));
    b[1] = a[1];
    b[2] = a[3];
    nb = 2;
    d = b[2] - b[1];
    use[1] = use[3] = 1;
    first = 1;
    last = 3;
    for (int i = 4; i <= n; i++) {
      if (a[i] - b[nb] == d) {
        b[++nb] = a[i];
        use[i] = 1;
        last = i;
      }
    }
    nc = 0;
    for (int i = 1; i <= n; i++)
      if (!use[i]) c[++nc] = a[i];
    if (nc <= 2) {
      yes = 1;
      if (nc == 0) c[++nc] = b[nb--];
    } else {
      yes = 1;
      d = c[2] - c[1];
      for (int i = 3; i <= nc; i++)
        if (c[i] - c[i - 1] != d) {
          yes = 0;
          break;
        }
    }
    if (yes) {
      for (int i = 1; i <= nb; i++) printf("%d ", b[i]);
      puts("");
      for (int i = 1; i <= nc; i++) printf("%d ", c[i]);
      puts("");
      continue;
    }
    use[first] = 0;
    nc = 0;
    for (int i = 1; i <= n; i++)
      if (!use[i]) c[++nc] = a[i];
    if (nc <= 2) {
      yes = 1;
      if (nc == 0) c[++nc] = b[nb--];
    } else {
      yes = 1;
      d = c[2] - c[1];
      for (int i = 3; i <= nc; i++)
        if (c[i] - c[i - 1] != d) {
          yes = 0;
          break;
        }
    }
    if (yes) {
      for (int i = 2; i <= nb; i++) printf("%d ", b[i]);
      puts("");
      for (int i = 1; i <= nc; i++) printf("%d ", c[i]);
      puts("");
      continue;
    }
    use[first] = 1;
    use[last] = 0;
    nc = 0;
    for (int i = 1; i <= n; i++)
      if (!use[i]) c[++nc] = a[i];
    if (nc <= 2) {
      yes = 1;
      if (nc == 0) c[++nc] = b[nb--];
    } else {
      yes = 1;
      d = c[2] - c[1];
      for (int i = 3; i <= nc; i++)
        if (c[i] - c[i - 1] != d) {
          yes = 0;
          break;
        }
    }
    if (yes) {
      for (int i = 1; i < nb; i++) printf("%d ", b[i]);
      puts("");
      for (int i = 1; i <= nc; i++) printf("%d ", c[i]);
      puts("");
      continue;
    }
    memset(use, 0, sizeof(use));
    b[1] = a[2];
    b[2] = a[3];
    nb = 2;
    d = b[2] - b[1];
    use[2] = use[3] = 1;
    first = 2;
    last = 3;
    for (int i = 4; i <= n; i++) {
      if (a[i] - b[nb] == d) {
        b[++nb] = a[i];
        use[i] = 1;
        last = i;
      }
    }
    nc = 0;
    for (int i = 1; i <= n; i++)
      if (!use[i]) c[++nc] = a[i];
    if (nc <= 2) {
      yes = 1;
      if (nc == 0) c[++nc] = b[nb--];
    } else {
      yes = 1;
      d = c[2] - c[1];
      for (int i = 3; i <= nc; i++)
        if (c[i] - c[i - 1] != d) {
          yes = 0;
          break;
        }
    }
    if (yes) {
      for (int i = 1; i <= nb; i++) printf("%d ", b[i]);
      puts("");
      for (int i = 1; i <= nc; i++) printf("%d ", c[i]);
      puts("");
      continue;
    }
    use[first] = 0;
    nc = 0;
    for (int i = 1; i <= n; i++)
      if (!use[i]) c[++nc] = a[i];
    if (nc <= 2) {
      yes = 1;
      if (nc == 0) c[++nc] = b[nb--];
    } else {
      yes = 1;
      d = c[2] - c[1];
      for (int i = 3; i <= nc; i++)
        if (c[i] - c[i - 1] != d) {
          yes = 0;
          break;
        }
    }
    if (yes) {
      for (int i = 2; i <= nb; i++) printf("%d ", b[i]);
      puts("");
      for (int i = 1; i <= nc; i++) printf("%d ", c[i]);
      puts("");
      continue;
    }
    use[first] = 1;
    use[last] = 0;
    nc = 0;
    for (int i = 1; i <= n; i++)
      if (!use[i]) c[++nc] = a[i];
    if (nc <= 2) {
      yes = 1;
      if (nc == 0) c[++nc] = b[nb--];
    } else {
      yes = 1;
      d = c[2] - c[1];
      for (int i = 3; i <= nc; i++)
        if (c[i] - c[i - 1] != d) {
          yes = 0;
          break;
        }
    }
    if (yes) {
      for (int i = 1; i < nb; i++) printf("%d ", b[i]);
      puts("");
      for (int i = 1; i <= nc; i++) printf("%d ", c[i]);
      puts("");
      continue;
    }
    puts("No solution");
  }
  return 0;
}
