#include "bits/stdc++.h" using namespace std; #define T 50 #define MAX 1000000001 long long A[T]; long long B[T]; long long ansA = MAX; long long ansB = MAX; int main() { A[0] = 1; B[1] = 1; for (int i = 2; i < T; i++) { A[i] = A[i - 1] + A[i - 2]; B[i] = B[i - 1] + B[i - 2]; } vector num(3); cin >> num[0] >> num[1] >> num[2]; sort(num.begin(), num.end()); if (num[0] == num[1] && num[1] == num[2]){ ansA = 1; ansB = num[0]; } if (num[0] == num[1] || num[1] == num[2]){ int tempA = num[0]; int tempB = num[2]; if (tempA > tempB) swap(tempA, tempB); if (ansA > tempA || (ansA == tempA && ansB > tempB)){ ansA = tempA; ansB = tempB; } } if (num[0] + num[1] == num[2]){ int tempA = num[0]; int tempB = num[1]; if (tempA > tempB) swap(tempA, tempB); if (ansA > tempA || (ansA == tempA && ansB > tempB)){ ansA = tempA; ansB = tempB; } } for (int i = 0; i < T; i++) { if (A[i] + B[i] > num[0]) continue; for (int j = 0; j < T; j++) { if (A[j] + B[j] > num[1]) continue; for (int k = 0; k < T; k++) { if (A[k] + B[k] > num[2]) continue; if (A[k] == 0 || B[k] == 0) continue; double lowa = 1; double higha = num[2] / A[k] + 1; if (lowa > higha) continue; for (int l = 0; l < 100; l++) { double a1 = (lowa + lowa + higha) / 3; double a2 = (lowa + higha + higha) / 3; double b1 = (num[2] - a1 * A[k]) / B[k]; double b2 = (num[2] - a2 * A[k]) / B[k]; double diff1 = 0; double diff2 = 0; diff1 += abs(num[0] - (a1 * A[i] + b1 * B[i])); diff1 += abs(num[1] - (a1 * A[j] + b1 * B[j])); diff2 += abs(num[0] - (a2 * A[i] + b2 * B[i])); diff2 += abs(num[1] - (a2 * A[j] + b2 * B[j])); if (diff1 < diff2) higha = a2; else lowa = a1; } int ta = (int)(lowa + 0.5); for (int a = max(ta - 100, 1); a <= ta + 100; a++){ int b = (num[2] - a * A[k]) / B[k]; if (a <= 0) continue; if (b <= 0) continue; if (num[0] != a * A[i] + b * B[i]) continue; if (num[1] != a * A[j] + b * B[j]) continue; if (num[2] != a * A[k] + b * B[k]) continue; if (ansA > a || (ansA == a && ansB > b)){ ansA = a; ansB = b; } } } } } for (int a = 1; a <= 50000; a++) { for (int e = 2; e < T; e++) { int b = (num[2] - a * A[e]) / B[e]; if (b <= 0) continue; if (a * A[e] + b * B[e] != num[2]) continue; int ok = 0; for (int c = 0; c < 2; c++) { bool flag = false; for (int d = 0; d < T; d++) { if (num[c] == a * A[d] + b * B[d]){ flag = true; break; } } if (flag) ok++; } if (ok == 2){ if (ansA > a || (ansA == a && ansB > b)){ ansA = a; ansB = b; } } } } for (int b = 1; b <= 50000; b++) { for (int e = 2; e < T; e++) { int a = (num[2] - b * B[e]) / A[e]; if (a <= 0) continue; if (a * A[e] + b * B[e] != num[2]) continue; int ok = 0; for (int c = 0; c < 2; c++) { bool flag = false; for (int d = 0; d < T; d++) { if (num[c] == a * A[d] + b * B[d]){ flag = true; break; } } if (flag) ok++; } if (ok == 2){ if (ansA > a || (ansA == a && ansB > b)){ ansA = a; ansB = b; } } } } for (int a = 1; a <= 500; a++) { for (int b = 1; b <= 500; b++) { int ok = 0; for (int c = 0; c < 3; c++) { bool flag = false; for (int d = 0; d < T; d++) { if (num[c] == a * A[d] + b * B[d]){ flag = true; break; } } if (flag) ok++; } if (ok == 3){ if (ansA > a || (ansA == a && ansB > b)){ ansA = a; ansB = b; } } } } if (ansA == MAX) cout << -1 << endl; else cout << ansA << " " << ansB << endl; }