using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
public class Test
{
public static void Main()
{
int[] a = Enumerable.Range(1,14).ToArray();
int maxlen = a.Length/2;
var res = MakePairs(a, maxlen);
Console.WriteLine(res[res.Count-1]);
}
static List<Tuple<NodeList,NodeList>> MakePairs(int[] nums, int maxlen)
{
var sums = new List<NodeList>();
for(int i = 0; i < nums.Length; i++)
{
var num = nums[i];
for(int j = sums.Count - 1; j >= 0; j--)
{
var list = sums[j];
if(list.Length >= maxlen)
continue;
var node = new Node { Number = num, Next = list.First };
var nodeList = new NodeList { First = node, Length = list.Length + 1, Sum = list.Sum + num };
sums.Add(nodeList);
}
sums.Add(new NodeList { First = new Node { Number = num }, Length = 1, Sum = num });
}
// string.Join(",", sums.Select(x => x.Sum.ToString()).ToArray() ).Dump();
sums.Sort((x,y) => x.Sum.CompareTo(y.Sum));
var res = new List<Tuple<NodeList,NodeList>>();
for(int i = 0; i < sums.Count; i++)
for(int j = i + 1; j < sums.Count; j++)
{
if(sums[i].Sum != sums[j].Sum)
break;
res.Add(Tuple.Create(sums[i], sums[j]));
}
return res;
}
class Node
{
public int Number { get; set; }
public Node Next { get; set; }
// public Node(int number, Node next = null)
// {
// Number = number;
// Next = next;
// }
}
class NodeList
{
public Node First { get; set; }
public int Length { get; set; }
public int Sum { get; set; }
public override string ToString()
{
var sb = new StringBuilder();
var cur = First;
for(int i = 0; i < Length; i++)
{
sb.Append(cur.Number.ToString());
sb.Append(',');
cur = cur.Next;
}
if(sb.Length > 0)
sb.Length -= 1;
return sb.ToString();
}
// public NodeList(Node first, int length, int sum)
// {
// First = first;
// Length = length;
// Sum = sum;
// }
}
class Result
{
public NodeList First { get; set; }
public NodeList Second { get; set; }
public int TailIndex { get; set; }
}
}