B - 互除法 Editorial /

Time Limit: 2 sec / Memory Limit: 256 MB

問題文

高橋君は、ユークリッドの互除法というアルゴリズムを学びましたが、これがどのぐらいの速度で動くのか気になりました。

なので、以下のようなC言語のコードを書きました。

#include <stdio.h>

int counter = 0;
int gcd(int a, int b) {
    if (b == 0) return a;
    counter++;
    return gcd(b, a%b);
}

int main() {
    int a, b;
    scanf("%d %d", &a, &b);
    gcd(a, b);
    printf("%d\n", counter);
}

これは、2 つの整数を標準入力から受け取り、そのgcdをユークリッドの互除法で求め、求める際に何回再帰したかを出力するコードです。

あなたは、このプログラムにいろんな値を出力させたくなりました。

具体的には、K が与えられるので、このプログラムの出力が K となるような a, b を一組求めてください。

制約

  • 1 ≦ K ≦ 40

ただし、以下の制約を満たすテストケースにすべて正解すれば 30 点が与えられる。

  • 1 ≦ K ≦ 10

入力

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

K

出力

a, b を空白区切りで 1 行に出力せよ。ただし、以下の制約を満たしていなければいけない。

1 ≦ a, b ≦ 1,000,000,000


入力例1

1

出力例1

1 1

入力例2

3

出力例2

4 5

入力例3

12

出力例3

314159265 358979323

どの入出力例も、これ以外にも条件を満たす出力はたくさんあります。