Problem: You are given a sequence of n integers a1, a2, ..., an. 

Determine a real number x such that the weakness of the sequence a1 - x, a2 - x, ..., an - x is as small as possible.

The weakness of a sequence is defined as the maximum value of the poorness over all segments (contiguous subsequences) of a sequence.

The poorness of a segment is defined as the absolute value of sum of the elements of segment.

Input

The first line contains one integer n (1 ≤ n ≤ 200 000), the length of a sequence.

The second line contains n integers a1, a2, ..., an (|ai| ≤ 10 000).

Output

Output a real number denoting the minimum possible weakness of a1 - x, a2 - x, ..., an - x. Your answer will be considered correct if its relative or absolute error doesn't exceed 10 - 6.

Examples

Input

3
1 2 3


Output

1.000000000000000


Input

4
1 2 3 4


Output

2.000000000000000


Input

10
1 10 2 9 3 8 4 7 5 6


Output

4.500000000000000

Note

For the first case, the optimal value of x is 2 so the sequence becomes  - 1, 0, 1 and the max poorness occurs at the segment "-1" or segment "1". The poorness value (answer) equals to 1 in this case. 

For the second sample the optimal value of x is 2.5 so the sequence becomes  - 1.5, - 0.5, 0.5, 1.5 and the max poorness occurs on segment "-1.5 -0.5" or "0.5 1.5". The poorness value (answer) equals to 2 in this case.

Solution (in CPP):

Solution:
#include <bits/stdc++.h>
using namespace std;
const int inf = 1 << 30;
const long long INF = 1LL << 62;
const long double pi = acos(-1);
const int mod = 1e9 + 7;
struct ii {
  int x, y;
  ii(int x = 0, int y = 0) : x(x), y(y) {}
  bool operator==(const ii &a) const { return x == a.x && y == a.y; }
  bool operator<(const ii &a) const {
    if (x != a.x) return x < a.x;
    return y < a.y;
  }
  ii friend operator+(ii a, ii b) { return ii(a.x + b.x, a.y + b.y); }
  ii friend operator-(ii a, ii b) { return ii(a.x - b.x, a.y - b.y); }
};
template <class T>
void sc(T &x) {
  char c;
  x = 0;
  int t = 1;
  while (c = getchar(), c < 48)
    if (c == '-') t = -1;
  do x = x * 10 + (c ^ 48);
  while (c = getchar(), c > 47);
  x = x * t;
}
template <class T>
void nt(T x) {
  if (!x) return;
  nt(x / 10);
  putchar(x % 10 + '0');
}
template <class T>
void pt(T x) {
  if (x < 0) putchar('-'), x = -x;
  if (!x)
    putchar('0');
  else
    nt(x);
}
template <class T>
void pts(T x) {
  pt(x);
  putchar(' ');
}
template <class T>
void ptn(T x) {
  pt(x);
  putchar('\n');
}
template <class T>
void pp(T x, int y) {
  static char ch[] = {" \n"};
  pt(x);
  putchar(ch[y]);
}
template <class T>
void Max(T &x, T y) {
  if (x < y) x = y;
}
template <class T>
void Min(T &x, T y) {
  if (x > y) x = y;
}
const int maxn = 200005;
int n;
int d[maxn];
double solve(double x) {
  double t = 0, mx = 0, mn = 0;
  for (int i = 0, i_ = (n)-1; i <= i_; ++i) {
    t += d[i] - x;
    Max(mx, t);
    Min(mn, t);
  }
  return fabs(mx - mn);
}
int main() {
  sc(n);
  for (int i = 0, i_ = (n)-1; i <= i_; ++i) sc(d[i]);
  double l = -10000, r = 10000;
  int cas = 100;
  while (cas--) {
    double k = (r - l) / 3;
    double l1 = l + k;
    double l2 = l + k + k;
    double ans1 = solve(l1);
    double ans2 = solve(l2);
    if (ans1 < ans2)
      r = l2;
    else
      l = l1;
  }
  double res = solve(l);
  printf("%.12f\n", res);
  return 0;
}