#include "bits/stdc++.h"
#include<unordered_map>
#include<unordered_set>
#pragma warning(disable:4996)
using namespace std;
using ld = long double;
const ld eps = 1e-9;

long long int gcd(long long int l, long long int r) {
	if (l > r)return gcd(r, l);
	else {
		if (r%l) {
			return gcd(l, r%l);

		}
		else {
			return l;
		}
	}
}

int main() {
	while (true) {
		long long int a,b,c;cin>>a>>b>>c;
		if(!a&&!b&&!c)break;
		long long int num=b*b-4*a*c;
		bool ok=true;
		if (num < 0) {
			ok=false;
		}
		else {
			long long int anum=sqrt(num);
			if (num != anum*anum) {
				ok=false;
			}
			else {
				vector<long long int>si{ -b + anum,-b - anum };
				long long int bo=2*a;

				vector<pair<long long int,long long int>>anss;
				for (int i = 0; i < 2; ++i) {
					if (si[i] == 0) {
						anss.emplace_back(1,0);
						continue;
						
					}
					long long int x=gcd(abs(si[i]),bo);
					anss.emplace_back(bo/x,-si[i]/x);
				}
				sort(anss.begin(),anss.end());
				reverse(anss.begin(),anss.end());
				cout<<anss[0].first<<" "<<anss[0].second<<" "<<
					anss[1].first<<" "<<anss[1].second<<endl;
			}
		}

		if (ok) {

		}
		else {

			cout << "Impossible" << endl;
		}
	}
	return 0;
}