Problem:
たしざんひきざん (Calculation Training)

square1001 君は E869120 君に、誕生日プレゼントとして二つの数字 $A$ と $B$ をプレゼントしました。

E869120 君はこの二つの数字を使って、計算トレーニングをすることにしました。

具体的には、E869120君は次の操作をちょうど $N$ 回これらの数に行います。

奇数回目の操作のとき、$A$ を $A-B$ で置き換える

偶数回目の操作のとき、$B$ を $A+B$ で置き換える

E869120君が $N$ 回の操作をした後、$A$ と $B$ の値がそれぞれいくつになっているか求めてください。

入力

入力は以下の形式で標準入力から与えられる。

$N$
$A$ $B$

出力

E869120君が $N$ 回の操作をした後の $A$ と $B$ の値を、この順に空白区切りで出力してください。

ただし、最後には改行を入れること。

制約

$1 \leq N \leq 1000000000000000000 \ (= 10^{18})$

$1 \leq A \leq 1000000000 \ (= 10^9)$

$1 \leq B \leq 1000000000 \ (= 10^9)$

入力は全て整数である。

入力例1

3
3 4

出力例1

-4 3

$(A, B)$ の値は $(3,4) → (-1,4) → (-1,3) → (-4,3)$ と変化します。

入力例2

8
6 9

出力例2

3 -6

Solution in Ruby (judge verdict: Accepted)

require 'matrix'

def power(n, k)
  x = 1
  r = n
  while k > 0
    x *= r if k & 1 == 1
    r *= r
    # x %= MOD
    # r %= MOD
    k >>= 1
  end
  x
end

m1 = Matrix[
  [1, -1],
  [0,  1]
]
m2 = Matrix[
  [1, 0],
  [1, 1]
]

n = gets.to_i
v = Vector[*gets.split.map(&:to_i)]
x = power(m2 * m1, n / 2) * v
x = m1 * x if n.odd?
puts x.to_a * ' '