Nicholas has an array a that contains n distinct integers from 1 to n. In other words, Nicholas has a permutation of size n.

Nicholas want the minimum element (integer 1) and the maximum element (integer n) to be as far as possible from each other. He wants to perform exactly one swap in order to maximize the distance between the minimum and the maximum elements. The distance between two elements is considered to be equal to the absolute difference between their positions.

Input

The first line of the input contains a single integer n (2 ≤ n ≤ 100) — the size of the permutation.

The second line of the input contains n distinct integers a1, a2, ..., an (1 ≤ ai ≤ n), where ai is equal to the element at the i-th position.

Output

Print a single integer — the maximum possible distance between the minimum and the maximum elements Nicholas can achieve by performing exactly one swap.

Examples

Input

5
4 5 1 3 2


Output

3


Input

7
1 6 5 3 4 7 2


Output

6


Input

6
6 5 4 3 2 1


Output

5

Note

In the first sample, one may obtain the optimal answer by swapping elements 1 and 2.

In the second sample, the minimum and the maximum elements will be located in the opposite ends of the array if we swap 7 and 2.

In the third sample, the distance between the minimum and the maximum elements is already maximum possible, so we just perform some unnecessary swap, for example, one can swap 5 and 2.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.math.BigInteger;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.StringTokenizer;

public class Solution implements Runnable
{
    private void solve() throws IOException
    {
        int n = nextInt();

        int min = n+1, max = -1;
        int minPos = 0, maxPos = -1;
        for (int i = 1; i <= n; i++) {
            int x = nextInt();
            if (x < min) {
                min = x;
                minPos = i;
            }

            if (x > max) {
                max = x;
                maxPos = i;
            }
        }

        int ans = -1;
        if (minPos == 0 || maxPos == 0 || minPos == n || maxPos == n)
            ans = n - 1;
        else {
            ans = Math.max( n - minPos, minPos -1 );
            ans = Math.max( ans, n - maxPos );
            ans = Math.max( ans, maxPos -1  );
        }

        writer.print( ans );



    }

    private String binaryXOR (String s1, String s2) {
        BigInteger a = new BigInteger( s1,2 );
        BigInteger b = new BigInteger( s2,2 );

        return a.xor( b ).toString(2);

    }


    private static void findDP( Node node )
    {
        for ( Node child : node.children )
        {
            if ( child.value > node.value )
            {
                child.dp = Math.max( child.dp, node.dp+1 );
                //findDP( child );
            }
        }
    }

    private static class Obj implements Comparable<Obj> {
        String name;
        int value;

        public Obj(int value) {
            this.value = value;
        }

        public Obj(String name, int value) {
            this.name = name;
            this.value = value;
        }

        @Override
        public int compareTo(Obj o) {
            return o.value-this.value;
        }
    }


    private static class Node
    {
        long value;
        long dp;
        List<Node> children;
        Node parent;

        public Node( int value )
        {
            this.value = value;
            dp = 1;
            children = new ArrayList<Node>();
        }
    }
    
    private static boolean isInt (String s) {
    	if (s.length() < 1)
    		return false;
    	else {
    		for (char c : s.toCharArray()) {
    			if (c < '0' || c > '9') {
    				return false;
    			}
    		}
    	}
    	
    	return true;
    }

    private static Map<String,Integer> findSubString(String s, int k) {
        Map<String,Integer> map = new HashMap<>(  );
        for (int i = 0; i < s.length() - (k - 1); i++) {
            String str = new String( s.substring( i,i+k ) );
            if (map.containsKey( str )) {
                map.put( str, map.get( str ) + 1 );
            }
            else {
                map.put( str, 1 );

            }
        }

        return map;
    }



    //mergesort

    public static Comparable[] mergeSort(Comparable[] list)
    {
        if (list.length <= 1) {
            return list;
        }

        Comparable[] left = new Comparable[list.length / 2];
        Comparable[] right = new Comparable[list.length - left.length];
        System.arraycopy(list, 0, left, 0, left.length);
        System.arraycopy(list, left.length, right, 0, right.length);

        mergeSort(left);
        mergeSort(right);
         
        merge(left, right, list);
        return list;
    }
     
    private static void merge(Comparable[] left, Comparable[] right, Comparable[] result)
    {
        int leftIdx = 0;
        int rightIdx = 0;
        int index = 0;

        while (leftIdx < left.length && rightIdx < right.length)
        {
            if (left[leftIdx].compareTo(right[rightIdx]) < 0)
            {
                result[index++] = left[leftIdx];
                leftIdx++;
            } 
            else
            {
                result[index++] = right[rightIdx];
                rightIdx++;
            }
        }

        System.arraycopy(left, leftIdx, result, index, left.length - leftIdx);
        System.arraycopy(right, rightIdx, result, index, right.length - rightIdx);
    }

    public static List<Obj> mergeSort(List<Obj> list) {
        if (list.size() <= 1) {
            return list;
        }

        List<Obj> left = new ArrayList(list.subList( 0, list.size()/2 ));
        List<Obj> right = new ArrayList (list.subList( left.size(), list.size() ));

        left = mergeSort(left);
        right = mergeSort(right);

        list = merge(left, right);

        return list;
    }

    private static List<Obj> merge(List<Obj> left,List<Obj> right)
   {
      int leftCounter = 0, rightCounter = 0;
       List<Obj> result = new ArrayList<>(  );

       while (leftCounter < left.size() && rightCounter < right.size()) {
           Obj leftItem = left.get( leftCounter );
           Obj rightItem = right.get( rightCounter );

           if ( leftItem.compareTo( rightItem ) < 0) {
               result.add( leftItem );
               leftCounter++;
            }
            else
            {
                result.add( rightItem );
                rightCounter++;
            }
       }

       if (leftCounter >= left.size())
           result.addAll( right.subList( rightCounter, right.size() ) );
       else if (rightCounter >= right.size())
           result.addAll( left.subList( leftCounter, left.size() ) );

       return result;
   }

    public static void main(String[] args) {
        new Solution().run();
    }

    BufferedReader reader;
    StringTokenizer tokenizer;
    PrintWriter writer;

    public void run() {
        try {
            reader = new BufferedReader(new InputStreamReader(System.in));
            tokenizer = null;
            writer = new PrintWriter(System.out);
            solve();
            reader.close();
            writer.close();
        } catch (Exception e) {
            e.printStackTrace();
            System.exit(1);
        }
    }

    int nextInt() throws IOException {
        return Integer.parseInt(nextToken());
    }

    long nextLong() throws IOException {
        return Long.parseLong(nextToken());
    }

    double nextDouble() throws IOException {
        return Double.parseDouble(nextToken());
    }

    String nextToken() throws IOException {
        while (tokenizer == null || !tokenizer.hasMoreTokens()) {
            tokenizer = new StringTokenizer(reader.readLine());
        }
        return tokenizer.nextToken();
    }
}