#include <bits/stdc++.h>

using namespace std;

const double EPS = 1e-8;
const double INF = 1e12;
typedef complex<double> P;
namespace std {
    bool operator < (const P& a, const P& b) {
        return real(a) != real(b) ? real(a) < real(b) : imag(a) < imag(b);
    }
}
double cross(const P& a, const P& b) {
    return imag(conj(a)*b);
}
double dot(const P& a, const P& b) {
    return real(conj(a)*b);
}

typedef vector<P> G;

double area2(const G& P) {
    double A = 0;
    for (int i = 0; i < P.size(); ++i)
        A += cross(P[i], P[(i+1)%P.size()]);
    return A;
}

int main(){
    double x, y;
    G g;
    while(scanf("%lf,%lf", &x, &y) != EOF){P p(y, x); g.push_back(p);}
    double ret = 0;
    for(int i=1; i < g.size()-1; i++){
        double a = sqrt(pow(abs(g[i].real()-g[i+1].real()), 2)+ pow(abs(g[i].imag()-g[i+1].imag()),2));
        double b = sqrt(pow(abs(g[i+1].real()-g[i+2].real()), 2)+ pow(abs(g[i+1].imag()-g[i+2].imag()),2));
        double c = sqrt(pow(abs(g[i+2].real()-g[i].real()), 2)+ pow(abs(g[i+2].imag()-g[i].imag()),2));
        double z = (a+b+c)/2;
        ret += sqrt(z*(z-a)*(z-b)*(z-c));
    }
    printf("%.10f\n", ret);
}