#include<iostream>
#include<cmath>
#include<stdio.h>

struct POINT{
	double x;
	double y;
	POINT& operator += ( const POINT& p )
	{
		x += p.x;
		y += p.y;
		return *this;
	}
	POINT& operator -= ( const POINT& p )
	{
		x -= p.x;
		y -= p.y;
		return *this;
	}
	POINT& operator *= ( double factor )
	{
		x *= factor;
		y *= factor;
		return *this;
	}
	POINT& operator /= ( double factor )
	{
		x /= factor;
		y /= factor;
		return *this;
	}
};

POINT operator + ( const POINT& a , const POINT& b )
{
	POINT p(a);
	p += b;
	return p;
}

POINT operator - ( const POINT& a , const POINT& b )
{
	POINT p(a);
	p -= b;
	return p;
}

POINT operator * ( const POINT& a , double factor )
{
	POINT p(a);
	p *= factor;
	return p;
}

POINT operator / ( const POINT& a , double factor )
{
	POINT p(a);
	p /= factor;
	return p;
}

typedef POINT VECTOR2; // 2次元ベクトル

std::istream& operator >> ( std::istream& s , POINT& p )
{
	char c;
	return s >> p.x >> c >> p.y;
}

double getDotProduct( const VECTOR2& a , const VECTOR2& b )
{
	return a.x * b.x + a.y * b.y;
}

double getSizeofVECTOR2( const VECTOR2& a )
{
	return sqrt( pow( a.x , 2 ) + pow( a.y , 2 ) );
}

double getTheta( const VECTOR2& a , const VECTOR2& b )
{
	double dotProduct = getDotProduct( a , b );
	double sizeofVECTORa = getSizeofVECTOR2( a );
	double sizeofVECTORb = getSizeofVECTOR2( b );

	return acos( dotProduct / ( sizeofVECTORa * sizeofVECTORb ) );
}

int main(void)
{
	POINT p1, p2, q, r;
	while(1){
		char c;
		std::cin >> p1 >> c >> p2 >> c >> q;
		if( std::cin.eof() ){
			break;
		}
		VECTOR2 p1q, p1p2;
		p1q = q - p1;
		p1p2 = p2 - p1;
		POINT crossPoint = p1 + p1p2 * getDotProduct( p1q , p1p2 ) / pow(getSizeofVECTOR2(p1p2),2);
		r = ( crossPoint - q ) + crossPoint;

		printf( "%f %f\n" , r.x , r.y );
	}

	return 0;
}