/*
* Problem :: 1788 / 피보나치 수의 확장
*
* Kind :: Dynamic Programming + Math
*
* Insight
* - F(n) = F(n-1) + F(n-2) 는
* F(n+2) = F(n+1) + F(n) 처럼 생각할 수 있고,
* 위로부터 F(n) = F(n+2) - F(n+1) 임을 알 수 있다.
* + 주어지는 n 이 0 이상일 때는, F(n) = F(n-1) + F(n-2) 식을 활용하고
* n 이 0 미만일 때는 F(n) = F(n+2) - F(n+1) 식을 활용하자
*
* Point
* - n 이 0 이상일 때 dp[i] = F(i)
* n 이 0 미만일 때 dp[i] = F(-i)
* 로 생각해주자
* + 배열의 인덱스로 음수는 들어가지 못하니까...
* F(-2) 를 구하려고 할 때,
* 편의상 dp[2] = F(-2) 로 생각하자는 뜻이다
* # 만약, F(-3) 을 구하고자 하면
* F(-3) = F(-1) - F(-2) 이므로
* dp[3] = dp[1] - dp[2] 로 구할 수 있다
* -> 이를 일반화하면, dp[i] = dp[i-2] - dp[i-1] 이다
*
* - 사실 그냥 몇개 만들어보면 규칙이 보인다
* F(1) = 1 | F(-1) = 1
* F(2) = 1 | F(-2) = -1
* F(3) = 2 | F(-3) = 2
* F(4) = 3 | F(-4) = -3
* F(5) = 5 | F(-5) = 5
* F(6) = 8 | F(-6) = -8
* ...
* # 역시 직접 해보는 것이 짱이야~
*/
//
// BOJ
// ver.C++
//
// Created by GGlifer
//
// Open Source
#include <iostream>
using namespace std;
#define endl '\n'
// Set up : Global Variables
#define MOD 1000000000
// Set up : Functions Declaration
/* None */
int main()
{
// Set up : I/O
ios::sync_with_stdio(false);
cin.tie(nullptr);
// Set up : Input
int n; cin >> n;
// Process
int dp[max(1,abs(n))+1]; /* dp 크기는 최소 2이상 <= dp[0], dp[1] */
dp[0] = 0;
dp[1] = 1; /* F(1) = F(-1) = 1 */
if (n >= 0) { /* 주어진 n 이 0 이상일 때 */
/* F(n) = F(n-1) + F(n-2), n >= 2 */
for (int i=2; i<=n; i++) {
dp[i] = dp[i-1] + dp[i-2];
dp[i] %= MOD;
}
} else { /* 주어진 n 이 0 미만일 때 */
n = abs(n);
/* F(n) = F(n+2) - F(n+1), n < 0 */
for (int i=2; i<=n; i++) {
dp[i] = dp[i-2] - dp[i-1];
dp[i] %= MOD;
}
}
// Control : Output
cout << ((dp[n] > 0) ? 1 : (dp[n] < 0) ? -1 : 0) << endl;
cout << abs(dp[n]) << endl;
}
// Helper Functions
/* None */