Problem: A line on the plane is described by an equation Ax + By + C = 0. You are to find any point on this line, whose coordinates are integer numbers from  - 5·1018 to 5·1018 inclusive, or to find out that such points do not exist.

Input

The first line contains three integers A, B and C ( - 2·109 ≤ A, B, C ≤ 2·109) — corresponding coefficients of the line equation. It is guaranteed that A2 + B2 > 0.

Output

If the required point exists, output its coordinates, otherwise output -1.

Examples

Input

2 5 3


Output

6 -3

Solution (in JAVA):

Solution:
import java.io.*;
import java.util.*;

import static java.lang.Math.*;

public class BetaRound7_C implements Runnable {
	
	BufferedReader in;
	PrintWriter out;
	StringTokenizer tok;
	
	@Override
	public void run() {
		try {
			long startTime = System.currentTimeMillis();
			if (System.getProperty("ONLINE_JUDGE") != null) {
				in = new BufferedReader(new InputStreamReader(System.in));
				out = new PrintWriter(System.out);
			} else {
				in = new BufferedReader(new FileReader("input.txt"));
				out = new PrintWriter("output.txt");
			}
			tok = new StringTokenizer("");
			Locale.setDefault(Locale.US);
			solve();
			in.close();
			out.close();
			long endTime = System.currentTimeMillis();
			long totalMemory = Runtime.getRuntime().totalMemory();
			long freeMemory = Runtime.getRuntime().freeMemory();
			System.err.println("Time = " + (endTime - startTime) + " ms");
			System.err.println("Memory = " + ((totalMemory - freeMemory) / 1024) + " KB");
		} catch (Throwable e) {
			e.printStackTrace(System.err);
			System.exit(-1);
		}
	}
	
	String readString() throws IOException {
		while (!tok.hasMoreTokens()) {
			tok = new StringTokenizer(in.readLine());
		}
		return tok.nextToken();
	}
	
	int readInt() throws IOException {
		return Integer.parseInt(readString());
	}
	
	long readLong() throws IOException {
		return Long.parseLong(readString());
	}
	
	double readDouble() throws IOException {
		return Double.parseDouble(readString());
	}
	
	void debug(Object... o) {
		System.err.println(Arrays.deepToString(o));
	}
	
	public static void main(String[] args) {
		new Thread(null, new BetaRound7_C(), "", 256 * 1024 * 1024).start();
	}
	
//------------------------------------------------------------------------------
	
	long gcd(long a, long b) {
		return b == 0 ? a : gcd(b, a % b);
	}
	
	long euler(long x) {
		long ans = x;
		ArrayList<Long> divisors = new ArrayList<Long>();
		for (long i = 2; i * i <= x; i++) {
			if (x % i == 0) {
				divisors.add(i);
				while (x % i == 0) {
					x /= i;
				}
			}
		}
		if (x != 1) divisors.add(x);
		for (long d : divisors) {
			ans = ans / d * (d - 1);
		}
		return ans;
	}
	
	long powmod(long a, long n, long mod) {
		if (n == 0) return 1 % mod;
		if (n % 2 == 0) {
			long b = powmod(a, n / 2, mod);
			return (b * b) % mod;
		}
		return (a * powmod(a, n - 1, mod)) % mod;
	}
	
	long inv(long a, long mod) {
		return powmod(a, euler(mod) - 1, mod);
	}
	
	void solve() throws IOException {
		long A = readLong();
		long B = readLong();
		long C = readLong();
		
		if (A == 0) {
			// By = -C
			if (C % B == 0) {
				out.println(0 + " " + (-C / B));
			} else {
				out.println(-1);
			}
			return;
		}
		
		if (B == 0) {
			// Ax = -C
			if (C % A == 0) {
				out.println((-C / A) + " " + 0);
			} else {
				out.println(-1);
			}
			return;
		}
		
		// x = -(By + C) / A
		// (By + C) % A == 0
		// By == -C (mod A)
		// y = -C / B (mod A)
		long g = gcd(gcd(A, B), C);
		A /= g; B /= g; C /= g;
		if (A < 0) {
			A = -A; B = -B; C = -C;
		}
		
		if (abs(gcd(A, B)) != 1) {
			out.println(-1);
			return;
		}
		
		long CC = -C+A; CC %= A; CC += A; CC %= A;
		long BB = B%A; BB += A; BB %= A;
		debug(BB + " " + CC);
		long y = (CC * inv(BB, A)) % A;
		debug((B*y+C)%A);
		long x = -(B*y + C) / A;
		debug(A*x + B*y + C);
		out.println(x + " " + y);
	}
	
}