#include<stdio.h>
#include<stdlib.h>
#include<math.h>

typedef struct ANS Ans;
struct ANS{
	int ch;	//?????????
	int pa;	//?????????
};

int Main();
int GCM(int a, int b);	//??£?????´??°a??¨b????????§??¬?´???°????????????

int main(int argc, char *argv[]){
	while( Main() == 0 );
	return 0;
}

int Main(){
	int a = 0, b = 0, c = 0, d = 0, p = 0, q = 0, r = 0, s = 0, gcm = 0;	//ax^2+bx+c=(px+q)(rx+s)=0??¨??????????????????p???s????±??????????d???sqrt(b^2-4ac)??§?????????
	Ans x[2];	//?????????p,r??§????????????q,s??¨?????????
	if( scanf("%d %d %d", &a, &b, &c) != 3 ){ return -1; }
	if( a == 0 && b == 0 && c == 0 ){ return 1; }
	//?§£???????´???°??§????????????????????°?§£????????¨????????????
	if( b * b - 4 * a * c < 0 ){
		printf("Impossible\n");
		return 0;
	}
	d = sqrt(b * b - 4 * a * c);
	//d?????´??°??§?????????
	if( d != 0 ){
		if( d != (b * b - 4 * a * c) / d ){ 
			printf("Impossible\n");
			return 0;
		}
	}
	//?§£????±????????´?????????????
	gcm = GCM(abs(-b-d), 2*a);
	x[0].ch = (-b - d) / gcm;
	x[0].pa = (2 * a) / gcm;
	gcm = GCM(abs(-b+d), 2*a);
	x[1].ch = (-b + d) / gcm;
	x[1].pa = (2 * a) / gcm;
	//?????¶???????????????????????????????????????
	if( x[0].pa > x[1].pa ){
		p = x[0].pa;
		q = (-1) * x[0].ch;
		r = x[1].pa;
		s = (-1) * x[1].ch;
	}else if( x[0].pa == x[1].pa ){
		p = x[0].pa;
		r = x[0].pa;
		q = (-1) * (x[0].ch <= x[1].ch ? x[0].ch : x[1].ch);
		s = (-1) * (x[0].ch <= x[1].ch ? x[1].ch : x[0].ch);
	}else if( x[0].pa < x[1].pa ){
		p = x[1].pa;
		q = (-1) * x[1].ch;
		r = x[0].pa;
		s = (-1) * x[0].ch;
	}
	printf("%d %d %d %d\n", p, q, r ,s);
	return 0;
}

int GCM(int a, int b){
	if( a <= 0 || b <= 0 ){ return (a>0?a:(b>0?b:1)); }	//?????§??¬?´???°???1??¨???????????????
	int m = (a>=b?a:b), n = (a>=b?b:a), r = m % n;	//m>=n
	while( r != 0 ){
		m = n;
		n = r;
		r = m % n;
	}
	return n;
}