using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp32
{
    internal class Program
    {
        public struct P
        {
            public long x, y;
            public P(long x, long y) { this.x = x; this.y = y; }
        }

        static List<P> C(List<P> p)
        {
            p = p.OrderBy(x => x.x).ThenBy(x => x.y).ToList();
            List<P> h = new List<P>();

            foreach (var q in p)
            {
                while (h.Count >= 2 && X(h[h.Count - 2], h[h.Count - 1], q) <= 0)
                    h.RemoveAt(h.Count - 1);
                h.Add(q);
            }

            int t = h.Count + 1;
            foreach (var q in p.AsEnumerable().Reverse())
            {
                while (h.Count >= t && X(h[h.Count - 2], h[h.Count - 1], q) <= 0)
                    h.RemoveAt(h.Count - 1);
                h.Add(q);
            }

            h.RemoveAt(h.Count - 1);
            return h;
        }

        static long X(P o, P a, P b)
        {
            return (a.x - o.x) * (b.y - o.y) - (a.y - o.y) * (b.x - o.x);
        }

        static long A(List<P> h)
        {
            long a = 0;
            for (int i = 0; i < h.Count; i++)
            {
                int j = (i + 1) % h.Count;
                a += h[i].x * h[j].y - h[j].x * h[i].y;
            }
            return Math.Abs(a) / 2;
        }

        static void Main()
        {
            int n = int.Parse(Console.ReadLine());
            List<P> p = new List<P>();

            for (int i = 0; i < n; i++)
            {
                var c = Console.ReadLine().Split().Select(long.Parse).ToArray();
                p.Add(new P(c[0], c[1]));
            }

            var h = C(p);
            long a = A(h);

            Console.WriteLine(a);
        }
    }
}