#include #define rep(i, n) for (int (i) = 0; (i) < (int)(n); (i)++) const int dx[] = {1, 0, -1, 0}; const int dy[] = {0, 1, 0, -1}; using namespace std; typedef long long ll; ll F1[50], F2[50]; void init() { F1[0] = 1, F1[1] = 0; for (int i = 2; i < 50; i++) { F1[i] = F1[i-1] + F1[i-2]; } F2[0] = 0, F2[1] = 1; for (int i = 2; i < 50; i++) { F2[i] = F2[i-1] + F2[i-2]; } } // 2次連立方程式の計算 // 解が存在しなかったら(-1, -1)を返す pair calc(const vector >& mat) { ll det = mat[0][0] * mat[1][1] - mat[0][1] * mat[1][0]; if (det == 0) { // 今回の問題の場合はこうなったら解は存在しない return make_pair(-1, -1); } pair p; { ll tmp = mat[1][1]*mat[0][2] - mat[0][1] * mat[1][2]; p.first = tmp / det; } { ll tmp = mat[0][0]*mat[1][2] - mat[1][0] * mat[0][2]; p.second = tmp / det; } if (p.first*mat[0][0] + p.second*mat[0][1] != mat[0][2] || p.first*mat[1][0] + p.second*mat[1][1] != mat[1][2]) return make_pair(-1, -1); return p; } vector > solve(const vector X) { vector > ret; for (int i = 0; i < 50; i++) { for (int j = i+1; j < 50; j++) { vector > mat(2, vector(3)); mat[0][0] = F1[i]; mat[0][1] = F2[i]; mat[0][2] = X[0]; mat[1][0] = F1[j]; mat[1][1] = F2[j]; mat[1][2] = X[1]; auto p = calc(mat); if (p.first > 0 && p.second > 0) { ret.push_back(p); } } } sort(ret.begin(), ret.end()); return ret; } int main() { cin.tie(0); ios::sync_with_stdio(false); init(); vector X(3); for (int i = 0; i < 3; i++) { cin >> X[i]; } sort(X.begin(), X.end()); X.erase(unique(X.begin(), X.end()), X.end()); if (X.size() == 2) { auto ans = solve(X); cout << ans[0].first << " " << ans[0].second << endl; } else if (X.size() == 1) { X.push_back(1); swap(X[0], X[1]); auto ans = solve(X); cout << ans[0].first << " " << ans[0].second << endl; } else { auto Y = X; Y.pop_back(); auto ans = solve(Y); vector> ansans; for (auto p : ans) { for (int i = 0; i < 50; i++) for (int j = i+1; j < 50; j++) { if (F1[i]*p.first + F2[i]*p.second == X[2]) ansans.push_back(p); } } sort(ansans.begin(), ansans.end()); if (ansans.size() == 0) { cout << -1 << endl; } else { cout << ansans[0].first << " " << ansans[0].second << endl; } } return 0; }