import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner;
public class Main {
/**
* 1 2 3 4
* 1 2 5
*/
public static int count = 0;
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// int[] costs = new int[scanner.nextInt()];
// for (int i = 0; i < costs.length; i++) {
// costs[i] = scanner.nextInt();
// }
// System.out.println(minCost(costs));
// int n = scanner.nextInt();
// int[] array = new int[n];
// for (int i = 0; i < array.length; i++) {
// array[i] = scanner.nextInt();
// }
// System.out.println(upPath(array));
// int m = scanner.nextInt();
// int[][] matrix = new int[n][m];
// for (int i = 0; i < n; i++) {
// for (int i1 = 0; i1 < m; i1++) {
// matrix[i][i1] = scanner.nextInt();
// }
// }
// System.out.println(minPath(matrix));
// int n = scanner.nextInt();
// int m = scanner.nextInt();
// String s1 = scanner.next();
// String s2 = scanner.next();
// char[] c1 = s1.toCharArray();
// char[] c2 = s2.toCharArray();
// int[][] dp = new int[c1.length + 1][c2.length + 1];
// for (int i = 1; i <= c1.length; i++) {
// for (int j = 1; j <= c2.length; j++) {
// if (c1[i - 1] == c2[j - 1]) {
// dp[i][j] = dp[i - 1][j - 1] + 1;
// } else {
// dp[i][j] = Math.max(dp[i][j - 1], dp[i - 1][j]);
// }
// }
// }
// System.out.println(dp[c1.length][c2.length]);
// int n = scanner.nextInt();
// int[][] letters = new int[n][2];
// int[] tmp = new int[n];
// for (int i = 0; i < n; i++) {
// for (int j = 0; j < 2; j++) {
// letters[i][j] = scanner.nextInt();
// }
// }
// Arrays.sort(letters, (o1, o2) -> {
// if (o1[0] != o2[0]) {
// return o1[0] - o2[0];
// } else {
// return o2[1] - o1[1];
// }
// });
// for (int i = 0; i < n; i++) {
// tmp[i] = letters[i][1];
// }
// int n = scanner.nextInt();
// int[] arr = new int[n];
// for (int i = 0; i < n; i++) {
// arr[i] = scanner.nextInt();
// }
// System.out.println(process(arr, n));
int n = scanner.nextInt();
int[] p = new int[n];
for (int i = 0; i < p.length; i++) {
p[i] = scanner.nextInt();
}
System.out.println(getMaxMoney(p));
}
//买卖股票(一)
private static int getMaxMoney(int[] p) {
int res = 0, inMoney = Integer.MAX_VALUE, outMoney = Integer.MIN_VALUE;
for (int i = 0; i < p.length - 1; i++) {
if (p[i] >= inMoney) {
continue;
}
if (p[i] < inMoney) {
inMoney = p[i];
outMoney = Integer.MIN_VALUE;
}
for (int j = i + 1; j < p.length; j++) {
if (p[j] <= outMoney) {
continue;
}
if (p[j] > outMoney) {
outMoney = p[j];
res = Math.max(res, outMoney - inMoney);
}
}
}
return res;
}
/**
* 7
* s=1
* 0 1 2n c i 3
* 2 0 0 0
*
* @param p
* @return
*/
private static int jumpGameThree(int[] p) {
int n = p.length;
int step = 0, cur = 0, next = 0;
for (int i = 0; i < n; i++) {
if (cur < i) {
step++;
cur = next;
if (cur < i) {
return -1;
}
}
next = Math.max(next, i + p[i]);//next = 2
}
return step;
}
/**
* 6
* i2 4 2 100 0 1
* 0 s-1 -1 -1 -1 -1
*
* @param a
* @return
*/
private static int jumpGameTwo(int[] a) {
int n = a.length;
int[] dp = new int[n];
Arrays.fill(dp, -1);
dp[0] = a[0];
for (int i = 0; i < n - 1; i++) {
if (dp[i] < 0 || a[i] == 0) {
continue;
}
int end = Math.min(n, i + a[i] + 1);
for (int j = i + 1; j < end; j++) {
dp[j] = Math.max(dp[j], dp[i] + a[j]);
}
}
return dp[n - 1];
}
private static boolean jumpGame(int[] p) {
int n = p.length;
boolean[] dp = new boolean[n];
dp[0] = true;
for (int i = 0; i < n; i++) {
if (dp[i]) {
for (int j = i + 1; (j <= i + p[i]) && j < n; j++) {
dp[j] = true;
}
} else {
break;
}
}
return dp[n - 1];
}
private static int deleteMaxValue(int[] p) {
int[] dp = new int[1001];
int[] trans = new int[1001];
for (int i = 0; i < p.length; i++) {
trans[dp[i]] += dp[i];
}
dp[0] = 0;
dp[1] = trans[1];
for (int i = 2; i < trans.length; i++) {
dp[i] = Math.max(dp[i - 1], dp[i - 2] + trans[i]);
}
return dp[dp.length - 1];
}
private static int process(int[] arr, int n) {
int[] dp1 = new int[n];
int[] dp2 = new int[n];
dp1[1] = arr[0];
dp2[1] = arr[1];
int res = Math.max(arr[0], arr[1]);
for (int i = 2; i < n; i++) {
dp1[i] = Math.max(dp1[i - 2] + arr[i - 1], dp1[i - 1]);
dp2[i] = Math.max(dp2[i - 2] + arr[i], dp2[i - 1]);
res = Math.max(dp1[i], dp2[i]);
}
return res;
}
private static void getMaxValue(int[] arr) {
Scanner scanner = new Scanner(System.in);
int n = arr.length;
for (int i = 0; i < n; i++) {
arr[i] = scanner.nextInt();
}
if (n == 1) {
System.out.println(arr[0]);
}
if (n == 2) {
System.out.println(Math.max(arr[1], arr[0]));
}
int[] dp = new int[n];
dp[0] = arr[0];
dp[1] = arr[1];
dp[2] = arr[0] + arr[2];
for (int i = 3; i < dp.length; i++) {
dp[i] = arr[i] + (Math.max(dp[i - 2], dp[i - 3]));
}
System.out.println(Math.max(dp[n - 1], dp[n - 2]));
}
public static int getMaxLength(String s1, String s2) {
char[] c1 = s1.toCharArray();
char[] c2 = s2.toCharArray();
int[][] dp = new int[c1.length + 1][c2.length + 1];
for (int i = 1; i <= c1.length; i++) {
for (int j = 1; j <= c2.length; j++) {
if (c1[i - 1] == c2[j - 1]) {
dp[i][j] = dp[i - 1][j - 1] + 1;
} else {
dp[i][j] = Math.max(dp[i][j - 1], dp[i - 1][j]);
}
}
}
return dp[c1.length][c2.length];
}
public static int upPath(int[] array) {
int n = array.length;
int[] dp = new int[n];
Arrays.fill(dp, 1);
int res = 1;
for (int i = 1; i < n; i++) {
for (int j = 0; j < i; j++) {
if (array[i] > array[j]) {
dp[i] = Math.max(dp[i], dp[j] + 1);
}
res = Math.max(res, dp[i]);
}
}
return res;
}
private static int minPath(int[][] matrix) {
if (matrix == null || matrix.length < 1 || matrix[0] == null || matrix[0].length < 1) {
return 0;
}
int n = matrix.length;
int m = matrix[0].length;
int[][] dp = new int[n][m];
dp[0][0] = matrix[0][0];
for (int i = 1; i < m; i++) {
dp[0][i] = dp[0][i - 1] + matrix[0][i];
}
for (int i = 1; i < n; i++) {
dp[i][0] = dp[i - 1][0] + matrix[i][0];
}
for (int i = 1; i < n; i++) {
for (int j = 1; j < m; j++) {
dp[i][j] = Math.min(dp[i - 1][j] + matrix[i][j], dp[i][j - 1] + matrix[i][j]);
}
}
return dp[n - 1][m - 1];
}
/**
* 3 2 -2 4
*
* @param nums
* @return
*/
private static int Multiply(int[] nums) {
int preMax = 1;
int preMin = 1;
int res = (int) -1e9;
for (int num : nums) {
int a = preMax * num, b = preMin * num;
//3 3 6 6 -12 -4
preMax = Math.max(Math.max(a, b), num);
//3 6 -2
preMin = Math.min(Math.min(a, b), num);
//3 2 -12
res = Math.max(preMax, res);
}
return res;
}
private static int maxLength(int[] array) {
int res = array[0], cur = array[0];
for (int i = 1; i < array.length; i++) {
cur = Math.max(array[i], array[i] + cur);
res = Math.max(res, cur);
}
return res;
}
private static int numTree(int n) {
int[] dp = new int[n + 1];
dp[0] = 1;
dp[1] = 1;
for (int i = 2; i <= n; i++) {
for (int j = 0; j < i; j++) {
dp[i] += dp[j] * dp[i - j - 1];
}
}
return dp[n];
}
private static int minCost(int[] costs) {
int[] dp = new int[costs.length + 1];
for (int i = 2; i <= costs.length; i++) {
dp[i] = Math.min(dp[i - 2] + costs[i - 2], dp[i - 1] + costs[i - 1]);
}
return dp[costs.length];
}
private static void dfs(int n) {
if (n < 0) {
return;
}
if (n == 0) {
count++;
return;
}
for (int i = 1; i <= n; i++) {
dfs(n - i);
}
}
public static ArrayList<String> stringArrayList = new ArrayList<>();
public static ArrayList<ArrayList<Integer>> arrayList = new ArrayList<>();
public static void main1(String[] args) throws IOException {
Scanner scanner = new Scanner(System.in);
String fourPai = scanner.nextLine();
String[] strings = fourPai.split(" ");
int[] fourNum = new int[4];
int index = 0;
for (String string : strings) {
if (string.compareTo("joker") == 0 || string.compareTo("JOKER") == 0) {
System.out.println("ERROR");
return;
}
if (string.compareTo("J") == 0) {
fourNum[index++] = 11;
continue;
}
if (string.compareTo("Q") == 0) {
fourNum[index++] = 12;
continue;
}
if (string.compareTo("K") == 0) {
fourNum[index++] = 13;
continue;
}
if (string.compareTo("A") == 0) {
fourNum[index++] = 1;
} else {
fourNum[index++] = Integer.parseInt(string);
}
}
ArrayList<Integer> integerArrayList = new ArrayList<>();
ArrayList<Integer> indexAll = new ArrayList<>();
for (int i = 0; i < fourNum.length; i++) {
integerArrayList.add(fourNum[i]);
indexAll.add(i);
dfs(i, fourNum, integerArrayList, indexAll);
indexAll.clear();
integerArrayList.clear();
}
for (ArrayList<Integer> List : arrayList) {
for (int i = 0; i < List.size(); i++) {
getString(i + 1, List, new StringBuffer().append(List.get(i)), List.get(i));
if (stringArrayList.size() > 0 && stringArrayList.get(0).length() < 11) {
changeString(stringArrayList.get(0));
return;
}
break;
}
}
System.out.println("NONE");
}
private static void changeString(String s) {
StringBuilder stringBuilder = new StringBuilder();
for (int i = 0; i < s.length(); i++) {
if (Character.isDigit(s.charAt(i))) {
switch (s.charAt(i)) {
}
}
}
}
private static void getString(int i, ArrayList<Integer> list, StringBuffer stringBuffer, Integer sum) {
if (i == list.size()) {
if (sum == 24) {
stringArrayList.add(stringBuffer.toString());
}
return;
}
for (int j = i; j < list.size(); j++) {
Integer integer = list.get(j);
sum = sum + integer;
stringBuffer.append("+");
getString(j + 1, list, stringBuffer.append(integer), sum);
stringBuffer.delete(stringBuffer.length() - 2, stringBuffer.length());
sum = sum - integer;
}
for (int j = i; j < list.size(); j++) {
Integer integer = list.get(j);
sum = sum - integer;
stringBuffer.append("-");
getString(j + 1, list, stringBuffer.append(integer), sum);
stringBuffer.delete(stringBuffer.length() - 2, stringBuffer.length());
sum = sum + integer;
}
for (int j = i; j < list.size(); j++) {
Integer integer = list.get(j);
sum = sum * integer;
stringBuffer.append("*");
getString(j + 1, list, stringBuffer.append(integer), sum);
stringBuffer.delete(stringBuffer.length() - 2, stringBuffer.length());
sum = sum / integer;
}
for (int j = i; j < list.size(); j++) {
Integer integer = list.get(j);
int temp = sum;
sum = sum / integer;
stringBuffer.append("/");
getString(j + 1, list, stringBuffer.append(integer), sum);
stringBuffer.delete(stringBuffer.length() - 2, stringBuffer.length());
sum = temp;
}
}
private static void dfs(int i, int[] fourNum, ArrayList<Integer> integerArrayList, ArrayList<Integer> indexAll) {
if (integerArrayList.size() == fourNum.length) {
if (!arrayList.contains(integerArrayList)) {
arrayList.add(new ArrayList<>(integerArrayList));
}
return;
}
for (int j = 0; j < fourNum.length; j++) {
if (!indexAll.contains(j)) {
integerArrayList.add(fourNum[j]);
indexAll.add(j);
dfs(j, fourNum, integerArrayList, indexAll);
indexAll.remove(indexAll.size() - 1);
integerArrayList.remove(integerArrayList.size() - 1);
}
}
}
public int[] solve(int n, int m, int[] a) {
// write code here
if (m % n == 0) {
return a;
}
int j = 0;
m = m % n;
for (int i = a.length - m; i < a.length; i++) {
int temp = a[i];
a[i] = a[j] + m;
a[j++] = temp;
}
for (int i = j; i < a.length - m; i++) {
a[i] = a[i] - m;
}
return a;
}
public ArrayList<Integer> spiralOrder(int[][] matrix) {
ArrayList<Integer> res = new ArrayList<>();
if (matrix.length == 0) return res;
int top = 0, bottom = matrix.length - 1;
int left = 0, right = matrix[0].length - 1;
while (top < (matrix.length + 1) / 2 && left < (matrix[0].length + 1) / 2) {
//上面 左到右
for (int i = left; i <= right; i++) {
res.add(matrix[top][i]);
}
//右边 上到下
for (int i = top + 1; i <= bottom; i++) {
res.add(matrix[i][right]);
}
//下面 右到左
for (int i = right - 1; top != bottom && i >= left; i--) {
res.add(matrix[bottom][i]);
}
//左边 下到上
for (int i = bottom - 1; left != right && i >= top + 1; i--) {
res.add(matrix[i][left]);
}
// 遍历完一圈之后,所有往里面靠
++top;
--bottom;
++left;
--right;
}
return res;
}
}