#include <stdio.h>


//如果删除的元素是用于求最大间隔的一个数的话,这个序列的最大间隔就比原先的最大间隔大
//所以就不能是最大间隔的最小值
//如果删除的元素与原先序列的最大间隔没有关系的话,这个序列的最大间隔有两种可能:
//1、原先序列的最大间隔
//2、重新产生一个最大间隔,如果任意删除一个元素时,最大间隔都比原先大时,我们就要去考虑这种可能性,就会产生新的最大间隔。刚开始木想到这种情况,我直接将原序列的最大间隔输出,提交成功了,但是仔细想了想还有这种可能
int main() {
    int a, b, max = 0, min = 1000;
    while (scanf("%d", &a) == 1) {
        int arr[100];
        scanf("%d", &arr[0]);
        for (int i = 1; i < a; i++) {
            scanf("%d", &arr[i]);
            if (max < (arr[i] - arr[i - 1])) {
                max = arr[i] - arr[i - 1];     //找出原序列的最大间隔
            }
        }
        int c=0,min=1001;
        for(int i=1;i<a-1;i++){
            if(arr[i+1]-arr[i-1]<=max){     //第2种情况
                c=1;
                break;
            }else{
                if(arr[i+1]-arr[i-1]<min){
                    min=arr[i+1]-arr[i-1];
                }
            }
        }
        if(c){
            printf("%d\n", max);
        }else{
            printf("%d\n",min);
        }
        
    }
    return 0;
}