Problem:
Score : 200 points

Problem Statement

It is only six months until Christmas, and AtCoDeer the reindeer is now planning his travel to deliver gifts.

There are N houses along TopCoDeer street. The i-th house is located at coordinate a_i. He has decided to deliver gifts to all these houses.

Find the minimum distance to be traveled when AtCoDeer can start and end his travel at any positions.

Constraints

1 ≤ N ≤ 100

0 ≤ a_i ≤ 1000

a_i is an integer.

Input

Input is given from Standard Input in the following format:

N
a_1 a_2 ... a_N

Output

Print the minimum distance to be traveled.

Sample Input 1

4
2 3 7 9

Sample Output 1

7

The travel distance of 7 can be achieved by starting at coordinate 9 and traveling straight to coordinate 2.

It is not possible to do with a travel distance of less than 7, and thus 7 is the minimum distance to be traveled.

Sample Input 2

8
3 1 4 1 5 9 2 6

Sample Output 2

8

There may be more than one house at a position.

Solution in C (GCC 5.4.1) (judge verdict: Accepted)

#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAX_INPUT_LEN     ( 10000 )
#define NUM_MAX_DATA      ( 1000 )
#define MAX_DATA_STR_LEN  ( 100 )
#define NO_DATA           ( 9999 )

struct data
{
    char data_str[MAX_DATA_STR_LEN + 1];
    short  data_num;
};

int split(char *str, const char *delim, char *outlist[]);


int main() {

    char  InputLine[MAX_INPUT_LEN + 1] = "";
    char* InputList[NUM_MAX_DATA + 1] = {0};

    struct data DataList[NUM_MAX_DATA + 1];
    int  data_count = 0;
    char* ret_fgets = NULL;
	int i = 0;

    int num = 0;
	int data_num = 0;
	int min = 1000;
	int max = 0;
	char newline = 'a';

    /* Get input data */
    scanf("%d", &num);
    scanf("%c", &newline);

    /* Init input list*/
    //init_list(DataList, NUM_MAX_DATA);
    for (i = 0; i < NUM_MAX_DATA; i++)
    {
        /* set data_num */
        memset( &DataList[i], 0x00, sizeof(struct data) );
        strcpy(DataList[i].data_str, "ZZZ");
        DataList[i].data_num = 0xffff;
    }

    /* Get all data */
    ret_fgets = fgets(InputLine, sizeof(InputLine), stdin);
    if (ret_fgets != NULL)
    {
        data_count = split(InputLine, " \n", InputList);
    }

    /* Set data-num */
    for (i = 0; i < data_count; i++)
    {
        /* set data_num */
        strcpy(DataList[i].data_str, InputList[i]);
        DataList[i].data_num = atoi(DataList[i].data_str);
    }

	for(i = 0; i < data_count; i++ )
	{
		data_num = DataList[i].data_num;
		if( data_num < min )
			min = data_num;
		if( data_num > max )
			max = data_num;
	}

    printf( "%d\n", max - min );

    return 0;
}

int split(char *str, const char *delim, char *outlist[])
{
    char *token;
    int count = 0;
    char *next_token = NULL;
    
    //token = strtok_s(str, delim, &next_token);
    token = strtok(str, delim);
    while ((token != NULL) && (count < NUM_MAX_DATA)) {
        outlist[count++] = token;
        //token = strtok_s(NULL, delim, &next_token);
        token = strtok(NULL, delim);
    }
    return count;
}