/* package whatever; // don't place package name! */
import java.util.*;
import java.lang.*;
import java.io.*;
import java.math.*;
/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
for (int i = 3; i < n; i++) {
vars[i%3] = vars[0].add(vars[1]).add(vars[2]);
}
return vars
[(n
-1)%3
].
mod(BigInteger.
valueOf((long) (Math.
pow(10,
9) + 7))); }
public static int fooBI3(int n) {
int p = 1000000007;
int[] vars = new int[3];
vars[0] = 1;
vars[1] = 2;
vars[2] = 4;
for (int i = 3; i < n; i++) {
vars[i%3] = ((vars[0] + vars[1])%p +vars[2])%p;
}
return vars[(n-1)%3];
}
{
System.
out.
println("15: " + fooBI2
(15) + " " + fooBI3
(15)); System.
out.
println("20000: " + fooBI2
(20000) + " " + fooBI3
(20000)); }
}
LyogcGFja2FnZSB3aGF0ZXZlcjsgLy8gZG9uJ3QgcGxhY2UgcGFja2FnZSBuYW1lISAqLwoKaW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CmltcG9ydCBqYXZhLmlvLio7CmltcG9ydCBqYXZhLm1hdGguKjsKCi8qIE5hbWUgb2YgdGhlIGNsYXNzIGhhcyB0byBiZSAiTWFpbiIgb25seSBpZiB0aGUgY2xhc3MgaXMgcHVibGljLiAqLwpjbGFzcyBJZGVvbmUKewogICAgcHVibGljIHN0YXRpYyBCaWdJbnRlZ2VyIGZvb0JJMihpbnQgbikgewogICAgICAgIEJpZ0ludGVnZXJbXSB2YXJzID0gbmV3IEJpZ0ludGVnZXJbM107CiAgICAgICAgdmFyc1swXSA9IEJpZ0ludGVnZXIudmFsdWVPZigxTCk7CiAgICAgICAgdmFyc1sxXSA9IEJpZ0ludGVnZXIudmFsdWVPZigyTCk7CiAgICAgICAgdmFyc1syXSA9IEJpZ0ludGVnZXIudmFsdWVPZig0TCk7CiAgICAgICAgZm9yIChpbnQgaSA9IDM7IGkgPCBuOyBpKyspIHsKICAgICAgICAgICAgdmFyc1tpJTNdID0gdmFyc1swXS5hZGQodmFyc1sxXSkuYWRkKHZhcnNbMl0pOwogICAgICAgIH0KICAgICAgICByZXR1cm4gdmFyc1sobi0xKSUzXS5tb2QoQmlnSW50ZWdlci52YWx1ZU9mKChsb25nKSAoTWF0aC5wb3coMTAsIDkpICsgNykpKTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGludCBmb29CSTMoaW50IG4pIHsKICAgIAlpbnQgcCA9IDEwMDAwMDAwMDc7CiAgICAgICAgaW50W10gdmFycyA9IG5ldyBpbnRbM107CiAgICAgICAgdmFyc1swXSA9IDE7CiAgICAgICAgdmFyc1sxXSA9IDI7CiAgICAgICAgdmFyc1syXSA9IDQ7CiAgICAgICAgZm9yIChpbnQgaSA9IDM7IGkgPCBuOyBpKyspIHsKICAgICAgICAgICAgdmFyc1tpJTNdID0gKCh2YXJzWzBdICsgdmFyc1sxXSklcCArdmFyc1syXSklcDsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHZhcnNbKG4tMSklM107CiAgICB9CgoJcHVibGljIHN0YXRpYyB2b2lkIG1haW4gKFN0cmluZ1tdIGFyZ3MpIHRocm93cyBqYXZhLmxhbmcuRXhjZXB0aW9uCgl7CgkJU3lzdGVtLm91dC5wcmludGxuKCIxNTogIiArIGZvb0JJMigxNSkgKyAiICAiICsgZm9vQkkzKDE1KSk7CgkJU3lzdGVtLm91dC5wcmludGxuKCIyMDAwMDogIiArIGZvb0JJMigyMDAwMCkgKyAiICAiICsgZm9vQkkzKDIwMDAwKSk7Cgl9Cn0=