Problem:
Score : 400 points

Problem Statement

You are given N integers; the i-th of them is A_i.
Find the maximum possible sum of the absolute differences between the adjacent elements after arranging these integers in a row in any order you like.

Constraints

2 \leq N \leq 10^5

1 \leq A_i \leq 10^9

All values in input are integers.

Input

Input is given from Standard Input in the following format:

N
A_1
:
A_N

Output

Print the maximum possible sum of the absolute differences between the adjacent elements after arranging the given integers in a row in any order you like.

Sample Input 1

5
6
8
1
2
3

Sample Output 1

21

When the integers are arranged as 3,8,1,6,2, the sum of the absolute differences between the adjacent elements is |3 - 8| + |8 - 1| + |1 - 6| + |6 - 2| = 21. This is the maximum possible sum.

Sample Input 2

6
3
1
4
1
5
9

Sample Output 2

25

Sample Input 3

3
5
5
1

Sample Output 3

8

Solution in C# (Mono 4.6.2.0) (judge verdict: Runtime Error)

using System;
using System.Linq;
using System.Collections.Generic;

public class Hello
{
    public static void Main()
    {
        // Your code here!
        int N = int.Parse(Console.ReadLine());
        var s = new List<int>();
        var t = new List<int>();
        int save = -1;
        for(int i = 0; i < N; i++)
        {
            s.Add(int.Parse(Console.ReadLine()));
        }
        s.Sort();
        
        //1文字目
        save = s[0]; 
        s.RemoveAt(0);
        t.Add(save);
        
        //2文字目
        save = s[s.Count - 1]; 
        s.RemoveAt(s.Count - 1);
        t.Add(save);
        
        //3文字目
        save = s[s.Count - 1]; 
        s.RemoveAt(s.Count - 1);
        t.Insert(0, save);
        
        //4文字目以降
        for(int i = 0; i < N - 3; i++)
        {
            //sの最小(頭)とってくる
            save = s[0];
            s.RemoveAt(0);
            if(i % 2 == 1)//奇数ならば先頭に追加
            {
                t.Insert(0, save);
            }
            else//偶数ならば末尾に追加
            {
                t.Add(save);
            }
        }
        /*
        //sの最後の文字(一番大きい文字)抜きだして
        int save = s[s.Count - 1]; 
        s.RemoveAt(s.Count - 1);
        //tの末尾に入れる
        t.Add(save);
        
        
        //tの最初に入れる
        t.Insert(0,save);
        */
        int sum = 0;
        for(int i = 0; i < N - 1; i++)//隣り合う要素の差の合計を求める
        {
            sum += Math.Abs(t[i] - t[i + 1]);
        }
        /*
        foreach(var x in t)
        {
            Console.WriteLine(x);
        }
        */
        
        Console.WriteLine(sum);
        
    }
}