#include <iostream>
#include <vector>
#include <numeric>
#include <string>
#include <complex>
#include <iomanip>
using namespace std;
typedef complex<double> P;
typedef vector<P> vec;
const double EPS = 1e-10;
//二つのスカラーが等しいか
#define EQ(a, b) (abs((a) - (b)) < EPS)
//二つのベクトルが等しいか
#define EQV(a, b) (EQ((a), real(), (b).real()) && EQ((a), imag(), (b).imag()))
#define curr(P, i) P[i]
#define next(P, i) P[(i + 1) % P.size()]

double dot(P a, P b)
{
    return real(a) * real(b) + imag(a) * imag(b);
}

double cross(P a, P b)
{
    return real(a) * imag(b) - imag(a) * real(b);
}

int is_orthogonal(P a1, P a2, P b1, P b2)
{
    return EQ(dot(a1 - a2, b1 - b2), 0.0);
}
int is_parallel(P a1, P a2, P b1, P b2)
{
    return EQ(cross(a1 - a2, b1 - b2), 0.0);
}

int ccw(P a, P b, P c)
{
    b -= a;
    c -= a;
    if (cross(b, c) > 0)
        return 1;
    if (cross(b, c) < 0)
        return -1;
    if (dot(b, c) < 0) // c--a--b on line
        return 2;
    if (norm(b) < norm(c)) //a--b--c on line or a==b
        return -2;
    return 0; // a--c--b on line a==c or b==c
}

int is_intersected_ls(P a1, P a2, P b1, P b2)
{
    return ccw(a1, a2, b1) * ccw(a1, a2, b2) <= 0 &&
           ccw(b1, b2, a1) * ccw(b1, b2, a2) <= 0;
}

double Area(vec &g)
{
    double A = 0;
    for (int i = 0; i < g.size(); ++i)
    {
        A += cross(curr(g, i), next(g, i));
    }
    return A / 2.0;
}
int main(void)
{
    int N;
    cin >> N;
    vec v;
    for (int i = 0; i < N; ++i)
    {
        double x, y;
        cin >> x >> y;
        P c = {x, y};
        v.push_back(c);
    }
    cout << fixed << setprecision(1) << Area(v) << endl;
}
