#include #include using namespace std ; typedef long long ll ; ll gcd(ll a, ll b) { if (b < a) swap(a, b) ; if (a == 0) return b ; return gcd(b % a, a) ; } ll triangle(ll a, ll b) { // points in the triangle to a,b and down to axis ll twicearea = a * b ; ll perim = a + b + gcd(a, b) ; return (twicearea + perim) / 2 ; } ll quad(ll a, ll b, ll c) { // points in the quad to a,b then c,b and down to axis ll twicearea = (2 * c - a) * b ; ll perim = c + b + c-a + gcd(a, b) ; return (twicearea + perim) / 2 ; } ll val(ll t, ll w, ll h) { if (t <= h) return triangle(w, t) ; else return quad(w-(t-h), h, w) ; } void solve(ll w, ll h, ll q, ll &x, ll &y) { if (q < w) { x = q+1 ; y = 0 ; return ; } if (q + h >= (w+1)*(h+1)-1) { x = 0 ; y = q + h - ((w+1)*(h+1)-1) + 1 ; return ; } ll b = 1 ; while (2 * b <= w + h) b += b ; ll lo = 0 ; for (; b; b>>=1) if (lo+b <= w+h && val(lo+b, w, h) <= q) lo += b ; q -= val(lo, w, h) ; ll x1 = 1 ; ll x2 = 0 ; ll y1 = 0 ; ll y2 = 1 ; ll xlo, ylo ; if (lo < h) { xlo = w ; ylo = lo ; } else { xlo = w+h-lo ; ylo = h ; } while (x1 + x2 <= w && y1 + y2 <= h && (x1 + x2) * ylo >= (y1 + y2) * xlo) { x1 += x2 ; y1 += y2 ; } vector v ; v.push_back(x2) ; v.push_back(y2) ; while (v.size() > 0) { ll xm = x1 + v[v.size()-2] ; ll ym = y1 + v[v.size()-1] ; if (xm > w || ym > h) { if (x1 * ylo < y1 * xlo) { ll cnt = min(h/y1, w/x1) ; if (cnt > q) { ll mul = q + 1 ; x = x1 * mul ; y = y1 * mul ; return ; } q -= cnt ; } x1 = v[v.size()-2] ; y1 = v[v.size()-1] ; v.resize(v.size()-2) ; continue ; } if (xm * ylo < ym * xlo) { v.push_back(xm) ; v.push_back(ym) ; } else { x1 = xm ; y1 = ym ; } } } int main() { ll m, n, k, q ; cin >> m >> n >> k ; m-- ; n-- ; for (int qn=0; qn> q ; ll seen = 0 ; ll x, y ; solve(n, m, q-1, x, y) ; cout << (y+1) << " " << (x+1) << endl ; } }