#include <bits/stdc++.h>   using namespace std;   int n, arr[30010], book[30010];   bool judge() {     int ps, gap;     int t1 = 1, t2;     while (t1 <= n && book[t1]) t1++;     t2 = t1 + 1;     if (t1 > n) return false;     while (t2 <= n && book[t2]) t2++;     if (t2 > n) return true;     gap = arr[t2] - arr[t1];     ps = t2;     for (int i = t2 + 1; i <= n; i++)       if (!book[i]) {         if (arr[i] - arr[ps] == gap)           ps = i;         else           return false;       }     return true;   }   int main() {     scanf( %d , &n);     for (int i = 1; i <= n; i++) scanf( %d , &arr[i]);     if (n == 2)       printf( %d n%d , arr[1], arr[2]);     else {       int x[3] = {arr[2] - arr[1], arr[3] - arr[2], arr[3] - arr[1]};       int flag = 0;       for (int i = 0; i < 3; i++) {         int st = 4, tmp = arr[3];         memset(book, 0, sizeof(book));         if (i == 0) {           book[2] = book[1] = 1;           st = 3;           tmp = arr[2];         } else if (i == 1)           book[2] = book[3] = 1;         else           book[1] = book[3] = 1;         for (int ii = st; ii <= n; ii++)           if (arr[ii] == tmp + x[i]) {             book[ii] = 1;             tmp = arr[ii];           }         if (judge()) {           flag = 1;           break;         } else {           int p = n;           while (!book[p]) p--;           book[p] = 0;           if (judge()) {             flag = 1;             break;           }         }       }       if (flag) {         for (int i = 1; i <= n; i++)           if (book[i]) printf( %d  , arr[i]);         printf(  n );         for (int i = 1; i <= n; i++)           if (!book[i]) printf( %d  , arr[i]);       } else         printf( No solution );     }     return 0;   }   