Recently, a chaotic virus Hexadecimal advanced a new theorem which will shake the Universe. She thinks that each Fibonacci number can be represented as sum of three not necessary different Fibonacci numbers.

Let's remember how Fibonacci numbers can be calculated. F0 = 0, F1 = 1, and all the next numbers are Fi = Fi - 2 + Fi - 1.

So, Fibonacci numbers make a sequence of numbers: 0, 1, 1, 2, 3, 5, 8, 13, ...

If you haven't run away from the PC in fear, you have to help the virus. Your task is to divide given Fibonacci number n by three not necessary different Fibonacci numbers or say that it is impossible.

Input

The input contains of a single integer n (0 ≤ n < 109) — the number that should be represented by the rules described above. It is guaranteed that n is a Fibonacci number.

Output

Output three required numbers: a, b and c. If there is no answer for the test you have to print "I'm too stupid to solve this problem" without the quotes.

If there are multiple answers, print any of them.

Examples

Input

3


Output

1 1 1


Input

13


Output

2 3 8
#include <bits/stdc++.h>
using namespace std;
long long int BS(vector<long long int>& V, long long int low,
                 long long int high, long long int key);
void SieveOfEratosthenes(vector<long long int>& V, long long int num);
long long int gcd(long long int a, long long int b);
long long int lcm(long long int a, long long int b);
unsigned long long int modularExponentiation(unsigned long long int x,
                                             unsigned long long int n,
                                             unsigned long long int M);
long long int primeFactors(long long int n);
int main() {
  long long int n;
  cin >> n;
  if (n >= 3) {
    vector<long long int> F(100000, 0);
    F[1] = 1;
    long long int i = 2;
    while (F[i - 1] < n) {
      F[i] = F[i - 1] + F[i - 2];
      i++;
    }
    i -= 2;
    cout << F[i] << " " << F[i - 2] << " " << F[i - 3] << endl;
  } else {
    if (n == 2) {
      cout << "1 1 0" << endl;
    } else {
      if (n == 1)
        cout << "1 0 0" << endl;
      else
        cout << "0 0 0" << endl;
    }
  }
  return 0;
}
long long int BS(vector<long long int>& V, long long int low,
                 long long int high, long long int key) {
  int mid = (low + high) / 2;
  if (low <= high) {
    if (key == V[mid]) {
      return mid;
    } else if (key < V[mid]) {
      return BS(V, low, mid - 1, key);
    } else
      return BS(V, mid + 1, high, key);
  }
  return mid;
}
void SieveOfEratosthenes(vector<long long int>& V, long long int num) {
  bool prime[num + 1];
  memset(prime, true, sizeof(prime));
  for (long long int p = 2; p * p <= num; p++) {
    if (prime[p] == true) {
      for (long long int i = p * p; i <= num; i += p) prime[i] = false;
    }
  }
  for (long long int p = 2; p <= num; p++)
    if (prime[p]) V.push_back(p);
}
long long int gcd(long long int a, long long int b) {
  if (b == 0) return a;
  return gcd(b, a % b);
}
long long int lcm(long long int a, long long int b) {
  return (a * b) / gcd(a, b);
}
unsigned long long int modularExponentiation(unsigned long long int x,
                                             unsigned long long int n,
                                             unsigned long long int M) {
  unsigned long long int result = 1;
  while (n > 0) {
    if (n % 2 == 1) result = (result * x) % M;
    x = (x * x) % M;
    n = n / 2;
  }
  return result;
}
long long int primeFactors(long long int n) {
  long long int cnt = 0;
  while (n % 2 == 0) {
    n = n / 2;
    cnt++;
  }
  for (int i = 3; i <= sqrt(n); i = i + 2) {
    while (n % i == 0) {
      n = n / i;
      cnt++;
    }
  }
  if (n > 2) {
    cnt++;
  }
  return cnt;
}
