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

struct POINT{
	double x;
	double y;
};

struct VECTOR2{ // 2次元ベクトル
	double x;
	double y;
};

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.x = q.x - p1.x;
		p1q.y = q.y - p1.y;
		p1p2.x = p2.x - p1.x;
		p1p2.y = p2.y - p1.y;
		POINT crossPoint;
		crossPoint.x = p1.x + p1p2.x * getDotProduct( p1q , p1p2 ) / pow(getSizeofVECTOR2(p1p2),2);
		crossPoint.y = p1.y + p1p2.y * getDotProduct( p1q , p1p2 ) / pow(getSizeofVECTOR2(p1p2),2);
		r.x = (crossPoint.x - q.x) + crossPoint.x;
		r.y = (crossPoint.y - q.y) + crossPoint.y;

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

	return 0;
}