#include <bits/stdc++.h>
using namespace std;
struct Matrix {
  long long m[5][5];
  Matrix() { memset(m, 0, sizeof(m)); }
  inline Matrix operator*(const Matrix b) {
    Matrix tmp;
    for (int i = 1; i <= 3; i++)
      for (int j = 1; j <= 2; j++)
        for (int k = 1; k <= 2; k++) tmp.m[i][j] += m[i][k] * b.m[k][j];
    return tmp;
  }
  void Print() {
    for (int i = 1; i <= 3; i++, cout << endl)
      for (int j = 1; j <= 2; j++) cout << m[i][j] << ' ';
    cout << endl;
  }
} A, I;
inline long long gcd(long long a, long long b) {
  if (a < 0) a = -a;
  if (b < 0) b = -b;
  if (b > a) swap(a, b);
  if (b == 0) return a;
  return gcd(b, a % b);
}
inline void Construct() {
  I.m[1][1] = 0;
  I.m[1][2] = 1;
  I.m[2][1] = 1;
  I.m[2][2] = -A.m[3][1] / A.m[3][2];
}
int main() {
  long long a, b, c;
  cin >> a >> b >> c;
  bool fl = false;
  if (abs(a) < abs(b)) {
    fl = true;
    swap(a, b);
  }
  if (b == 0) {
    if (c % a == 0)
      if (fl)
        cout << 0 << ' ' << -c / a << endl;
      else
        cout << -c / a << ' ' << 0 << endl;
    else
      cout << -1 << endl;
    return 0;
  }
  long long GcdVal = gcd(a, b);
  if (c % GcdVal != 0) {
    cout << -1 << endl;
    return 0;
  }
  for (int i = 1; i <= 2; i++) A.m[i][i] = 1;
  A.m[3][1] = abs(a), A.m[3][2] = abs(b);
  while (A.m[3][2] != 0) {
    Construct();
    A = A * I;
  }
  long long x = A.m[1][1], y = A.m[2][1];
  if (abs(a) != a) x = -x;
  if (abs(b) != b) y = -y;
  if (fl) swap(x, y);
  x = x * (-c / GcdVal), y = y * (-c / GcdVal);
  cout << x << ' ' << y << endl;
  return 0;
}

### Prompt

Develop a solution in Cpp to the problem described below:

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

### Response

```cpp
#include <bits/stdc++.h>
using namespace std;
struct Matrix {
  long long m[5][5];
  Matrix() { memset(m, 0, sizeof(m)); }
  inline Matrix operator*(const Matrix b) {
    Matrix tmp;
    for (int i = 1; i <= 3; i++)
      for (int j = 1; j <= 2; j++)
        for (int k = 1; k <= 2; k++) tmp.m[i][j] += m[i][k] * b.m[k][j];
    return tmp;
  }
  void Print() {
    for (int i = 1; i <= 3; i++, cout << endl)
      for (int j = 1; j <= 2; j++) cout << m[i][j] << ' ';
    cout << endl;
  }
} A, I;
inline long long gcd(long long a, long long b) {
  if (a < 0) a = -a;
  if (b < 0) b = -b;
  if (b > a) swap(a, b);
  if (b == 0) return a;
  return gcd(b, a % b);
}
inline void Construct() {
  I.m[1][1] = 0;
  I.m[1][2] = 1;
  I.m[2][1] = 1;
  I.m[2][2] = -A.m[3][1] / A.m[3][2];
}
int main() {
  long long a, b, c;
  cin >> a >> b >> c;
  bool fl = false;
  if (abs(a) < abs(b)) {
    fl = true;
    swap(a, b);
  }
  if (b == 0) {
    if (c % a == 0)
      if (fl)
        cout << 0 << ' ' << -c / a << endl;
      else
        cout << -c / a << ' ' << 0 << endl;
    else
      cout << -1 << endl;
    return 0;
  }
  long long GcdVal = gcd(a, b);
  if (c % GcdVal != 0) {
    cout << -1 << endl;
    return 0;
  }
  for (int i = 1; i <= 2; i++) A.m[i][i] = 1;
  A.m[3][1] = abs(a), A.m[3][2] = abs(b);
  while (A.m[3][2] != 0) {
    Construct();
    A = A * I;
  }
  long long x = A.m[1][1], y = A.m[2][1];
  if (abs(a) != a) x = -x;
  if (abs(b) != b) y = -y;
  if (fl) swap(x, y);
  x = x * (-c / GcdVal), y = y * (-c / GcdVal);
  cout << x << ' ' << y << endl;
  return 0;
}

```