#include <bits/stdc++.h>   using namespace std;   bool sign[30010];   int num[2];   int value[30010];   int start[3][2] = {{0, 1}, {0, 2}, {1, 2}};   int n;   bool Legal(int pos) {     if (pos == n - 1) return true;     int d = value[pos + 1] - value[pos];     for (int i = pos + 2; i < n; i++) {       if (value[i] - value[i - 1] != d) return false;     }     return true;   }   bool Legal2() {     int temp = -INT_MAX;     int d = INT_MAX;     bool ok = true;     for (int i = n - 1; i >= 0; i--) {       if (!sign[i]) {         if (temp == -INT_MAX) {           temp = value[i];           continue;         }         if (d == INT_MAX) {           d = value[i] - temp;           temp = value[i];         } else if (value[i] - temp != d) {           ok = false;           break;         } else           temp = value[i];       }     }     if (ok) return true;     ok = true;     temp = -INT_MAX;     d = INT_MAX;     for (int i = n - 1; i >= 0; i--) {       if (!sign[i]) {         if (temp == -INT_MAX) {           temp = value[i];           continue;         }         if (d == INT_MAX) {           d = value[i] - temp;           temp = value[i];         } else if (value[i] - temp != d)           return false;         else           temp = value[i];       }       if (sign[i] && ok) {         sign[i] = false;         if (temp == -INT_MAX) {           temp = value[i];           continue;         }         if (d == INT_MAX) {           d = value[i] - temp;           temp = value[i];         } else if (value[i] - temp != d) {           sign[i] = true;           ok = false;         } else           temp = value[i];       }     }     return true;   }   void Print() {     for (int i = 0; i < n; i++)       if (sign[i]) printf( %d  , value[i]);     printf(  n );     for (int i = 0; i < n; i++)       if (!sign[i]) printf( %d  , value[i]);     printf(  n );   }   int main() {     cin >> n;     for (int i = 0; i < n; i++) scanf( %d , &value[i]);     if (n <= 4) {       if (n == 2)         cout << value[0] << endl << value[1] << endl;       else if (n == 3)         cout << value[0] << endl << value[1] <<     << value[2] << endl;       else {         cout << value[0] <<     << value[1] << endl;         cout << value[2] <<     << value[3] << endl;       }       return 0;     }     if (value[0] + value[2] == 2 * value[1]) {       if (value[0] == value[1]) {         if (value[n - 1] == value[0]) {           for (int i = 0; i < n - 1; i++) printf( %d  , value[0]);           printf(  n );           printf( %d n , value[0]);           return 0;         } else {           int pos = 3;           for (; pos < n; pos++)             if (value[pos] != value[0]) break;           if (Legal(pos)) {             for (int i = 0; i < pos; i++) printf( %d  , value[0]);             printf(  n );             for (int i = pos; i < n; i++) printf( %d  , value[i]);             printf(  n );             return 0;           }         }       } else {         int temp = value[2];         sign[0] = sign[1] = sign[2] = true;         int d = value[1] - value[0];         int tot = 3;         for (int i = 3; i < n; i++) {           if (value[i] - temp != d)             continue;           else {             temp = value[i];             sign[i] = true;             tot++;           }         }         if (Legal2()) {           if (tot == n) sign[n - 1] = false;           Print();           return 0;         }       }     }     for (int sss = 0; sss < 3; sss++) {       memset(sign, false, sizeof(sign));       int temp = value[start[sss][1]];       int d = temp - value[start[sss][0]];       sign[start[sss][0]] = sign[start[sss][1]] = true;       for (int i = 3; i < n; i++) {         if (value[i] - temp != d)           continue;         else {           temp = value[i];           sign[i] = true;         }       }       if (Legal2()) {         Print();         return 0;       }     }     printf( No solution n );     return 0;   }