/* package so35398370; // don't place package name! */
import java.util.*;
import java.lang.*;
import java.io.*;
class App {
int fib(int n) {
// Handle special case when n == 0
if (n == 0) {
return 0;
}
// General case, return the first of the
// two values returned by fibaux
else {
return fibaux(n).getFirst();
}
}
// Auxiliary function
// Return the nth and (n-1)th Fibonacci numbers
// n must be an integer >= 1
Pair fibaux(int n) {
// Base case of for recursion
if (n == 1) {
return new Pair(1, 0);
} else {
// Recursive case
Pair next = fibaux(n - 1);
return new Pair(next.getFirst() + next.getSecond(), next.getFirst());
}
}
public static void main
(String[] args
) { App app = new App();
System.
out.
println(app.
fib(6)); }
class Pair {
private final int first;
private final int second;
public Pair(final int first, final int second) {
this.first = first;
this.second = second;
}
public int getFirst() {
return this.first;
}
public int getSecond() {
return this.second;
}
}
}
LyogcGFja2FnZSBzbzM1Mzk4MzcwOyAvLyBkb24ndCBwbGFjZSBwYWNrYWdlIG5hbWUhICovCgppbXBvcnQgamF2YS51dGlsLio7CmltcG9ydCBqYXZhLmxhbmcuKjsKaW1wb3J0IGphdmEuaW8uKjsKCmNsYXNzIEFwcCB7CiAgICBpbnQgZmliKGludCBuKSB7CiAgICAgICAgLy8gSGFuZGxlIHNwZWNpYWwgY2FzZSB3aGVuIG4gPT0gMAogICAgICAgIGlmIChuID09IDApIHsKICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgfQogICAgICAgIC8vIEdlbmVyYWwgY2FzZSwgcmV0dXJuIHRoZSBmaXJzdCBvZiB0aGUKICAgICAgICAvLyB0d28gdmFsdWVzIHJldHVybmVkIGJ5IGZpYmF1eAogICAgICAgIGVsc2UgewogICAgICAgICAgICByZXR1cm4gZmliYXV4KG4pLmdldEZpcnN0KCk7CiAgICAgICAgfQogICAgfQoKICAgIC8vIEF1eGlsaWFyeSBmdW5jdGlvbgogICAgLy8gUmV0dXJuIHRoZSBudGggYW5kIChuLTEpdGggRmlib25hY2NpIG51bWJlcnMKICAgIC8vIG4gbXVzdCBiZSBhbiBpbnRlZ2VyID49IDEKICAgIFBhaXIgZmliYXV4KGludCBuKSB7CiAgICAgICAgLy8gQmFzZSBjYXNlIG9mIGZvciByZWN1cnNpb24KICAgICAgICBpZiAobiA9PSAxKSB7CiAgICAgICAgICAgIHJldHVybiBuZXcgUGFpcigxLCAwKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAvLyBSZWN1cnNpdmUgY2FzZQogICAgICAgICAgICBQYWlyIG5leHQgPSBmaWJhdXgobiAtIDEpOwogICAgICAgICAgICByZXR1cm4gbmV3IFBhaXIobmV4dC5nZXRGaXJzdCgpICsgbmV4dC5nZXRTZWNvbmQoKSwgbmV4dC5nZXRGaXJzdCgpKTsKICAgICAgICB9CiAgICB9CgogICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgIEFwcCBhcHAgPSBuZXcgQXBwKCk7CiAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGFwcC5maWIoNikpOwogICAgfQoKICAgIGNsYXNzIFBhaXIgewogICAgICAgIHByaXZhdGUgZmluYWwgaW50IGZpcnN0OwogICAgICAgIHByaXZhdGUgZmluYWwgaW50IHNlY29uZDsKCiAgICAgICAgcHVibGljIFBhaXIoZmluYWwgaW50IGZpcnN0LCBmaW5hbCBpbnQgc2Vjb25kKSB7CiAgICAgICAgICAgIHRoaXMuZmlyc3QgPSBmaXJzdDsKICAgICAgICAgICAgdGhpcy5zZWNvbmQgPSBzZWNvbmQ7CiAgICAgICAgfQoKICAgICAgICBwdWJsaWMgaW50IGdldEZpcnN0KCkgewogICAgICAgICAgICByZXR1cm4gdGhpcy5maXJzdDsKICAgICAgICB9CgogICAgICAgIHB1YmxpYyBpbnQgZ2V0U2Vjb25kKCkgewogICAgICAgICAgICByZXR1cm4gdGhpcy5zZWNvbmQ7CiAgICAgICAgfQogICAgfQp9