#include <limits>
#include <limits>
#include<bits/stdc++.h>
using namespace std;
#define int   long long
#define dl '\n'
const int INF = 1e18;
#define printvec(v) for(int i=0;i<v.size();i++){cout<<v[i]<<" ";}cout<<endl;
#define loop(i,n){} for(int i=0;i<n;i++){}
#define read(v,n)   for(int i=0;i<n;i++){cin>>v[i];}
#define all(v)                ((v).begin()), ((v).end())
#define rall(v)                ((v).rbegin()), ((v).rend())
typedef vector<int> vi;
typedef vector<pair<int,int>> vip;
#define ll long long
void Antoine_Sobhy(){
  ios_base::sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr);
#ifndef ONLINE_JUDGE
  // freopen("business.in", "r", stdin);
  freopen("/home/antoine/Desktop/acpc/input.txt", "r", stdin);
  freopen("/home/antoine/Desktop/acpc/output.txt", "w", stdout);
#endif
}
const int N=15;
int dp[N+1][1<<N];
int dp2[N+1][1<<N];
int n;
vi a(N);
int mx=0;
int ans=0;
int rec(int last,int mask){
  if (__builtin_popcount(mask)==n)
  {
    return n*2;
  }

  int &ret=dp[last][mask];
  if (~ret)return ret;
  ret=0;
  if (__builtin_popcount(mask)==0 )
  {
    for (int i=0;i<n;i++)
    {
      if ( (mask& (1ll<<i) )==0)
      {
         ret=max(rec(i,mask|1ll<<i)+a[i],ret);
      }
    }
  }
  else if (__builtin_popcount(mask)==(n-1))
  {
    for (int i=0;i<n;i++)
    {
      if ( (mask& (1ll<<i) )==0)
      {
        ret=max(rec(i,mask|1ll<<i)+a[i]+abs(a[i]-a[last]),ret);
      }
    }

  }
  else
  {
    for (int i=0;i<n;i++)
    {
      if ( (mask& (1ll<<i) )==0)
      {
        ret=max(rec(i,mask|1ll<<i)+abs(a[i]-a[last]),ret);
      }
    }
  }

  return ret;

}

int freq(int last,int mask){
  if(__builtin_popcount(mask)==n)
  {
    return 1;
  }

  int &ret=dp2[last][mask];
  if (~ret)return ret;
  int opt=rec(last,mask);
  if (__builtin_popcount(mask)==0 )
  {
    for (int i=0;i<n;i++)
    {
      if ( (mask& (1ll<<i) )==0)
      {
        if (opt==rec(i,mask|1ll<<i)+a[i] )
        {
          ret+=freq(i,mask|(1ll<<i));
        }
      }
    }
  }
  else if (__builtin_popcount(mask)==(n-1))
  {
    for (int i=0;i<n;i++)
    {
      if ( (mask& (1ll<<i) )==0)
      {
        if (opt==rec(i,mask|1ll<<i)+a[i]+abs(a[i]-a[last]) )
        {
          ret+=freq(i,mask|(1ll<<i));
        }
      }
    }

  }
  else
  {
    for (int i=0;i<n;i++)
    {
      if ( (mask& (1ll<<i) )==0)
      {
        if (opt==rec(i,mask|1ll<<i)+abs(a[i]-a[last]) )
        {
          ret+=freq(i,mask|(1ll<<i));
        }
      }
    }
  }
  return ret;

}

void solve(){

  mx=0;
  ans=0;
  a.resize(n);
  read(a,n);
  memset(dp,-1,sizeof dp);
  mx=rec(0,0);
  memset(dp,-1,sizeof dp2);
  freq(0,0);
  cout<<mx<<" "<<ans<<dl;

}

int32_t main(){
  Antoine_Sobhy();
  int t=1;
  // cin>>t;
  // int tc=0;
  while(true) {
    cin>>n;
    if (n==0)return 0;
    // cout<<"Case "<<++tc<<":"<<endl;
    solve();
  }

  return 0;

}