import java.util.*;
import java.util.stream.*;

public class Partition {

    private static int arrayOfWeights[];

    private static int evaluate(int x) {
	int mask = 1;
	int n = arrayOfWeights.length;
	int sum0s = 0;
	int sum1s = 0;
	for(int i=0;i < n;i++) {
	    if ((x & mask) != 0) {
		sum1s = sum1s + arrayOfWeights[i];
	    }
	    else {
		sum0s = sum0s + arrayOfWeights[i];
	    }
	    mask = mask * 2;
	}
	if (sum1s == sum0s) {
	    return x;
	}
	else {
	    return 0;
	}
    }

    private static void printResults( int value,int n,int []array) 
    {
	System.out.print("Solution:\n");
	System.out.print("First partition: ") ;
	int mask = 1;
	int sum = 0;
	for(int i = 0;i < n;i++) {
	    if ((mask & value) != 0) {
		System.out.print(array[i]+" ");
		sum = sum + array[i];
	    }
	    mask = mask * 2;
	}
	System.out.println(" sum: "+sum);
	System.out.print("Second partition: ") ;
	mask = 1;
	sum = 0;
	for(int i = 0;i < n;i++) {
	    if ((mask & value) == 0) {
		System.out.print(array[i]+" ");
		sum = sum + array[i];
	    }
	    mask = mask * 2;
	}
	System.out.println(" sum: "+sum+"\n");
    }

    public static void main(String args[]) {

	Scanner scanner = new Scanner(System.in);
	int n = scanner.nextInt();
	arrayOfWeights = new int [n];
	for(int i = 0;i < n;i++) {
	    arrayOfWeights[i] = scanner.nextInt();
	}
	int twoToN = 1;
	for(int i = 0;i < n;i++) {
	    twoToN = twoToN * 2;
	}
	// System.out.println("2^n is: "+twoToN);

	int maxValue = IntStream.range(1,twoToN/2).parallel().map(e -> evaluate(e)).reduce(0,Integer::max);
	if (maxValue == 0) {
	    System.out.println("There is no solution.");
	}
	else {
	    System.out.println("There is a solution. One solutions is encoded by: "+maxValue);
	    printResults( maxValue,n,arrayOfWeights) ;
	}
    }
}
