import java.math.BigInteger;
import java.util.function.LongSupplier;
import java.util.function.Supplier;
class Main {
public static void main
(String[] args
) { System.
out.
println("Value is " + value
); }
static class Lazy<T> {
private Supplier<T> supplier;
private volatile T value;
public Lazy(Supplier<T> supplier) {
this.supplier = supplier;
}
public T get() {
T result = value;
if (result != null) return result;
synchronized (this) {
result = value;
if (result != null) return result;
System.
out.
println("Calculate!"); result = value = supplier.get();
}
return result;
}
}
private final Lazy<BigInteger> delegate;
public LazyBigInteger(LongSupplier loader) {
super("0");
delegate
= new Lazy
<>(() -> new BigInteger(String.
valueOf(loader.
getAsLong()))); }
@Override
public byte[] toByteArray() {
return delegate.get().toByteArray();
}
@Override
return delegate.get().abs();
}
@Override
return delegate.get().negate();
}
@Override
return delegate.get().add(value);
}
@Override
return delegate.get().subtract(value);
}
@Override
public int signum() {
return delegate.get().signum();
}
@Override
return delegate.get().shiftRight(n);
}
@Override
return delegate.get().shiftLeft(n);
}
@Override
public int bitLength() {
return delegate.get().bitLength();
}
@Override
public boolean testBit(int n) {
return delegate.get().testBit(n);
}
@Override
return delegate.get().setBit(n);
}
@Override
return delegate.get().clearBit(n);
}
@Override
return delegate.get().flipBit(n);
}
@Override
public int getLowestSetBit() {
return delegate.get().getLowestSetBit();
}
@Override
public int bitCount() {
return delegate.get().bitCount();
}
@Override
return delegate.get().not();
}
@Override
return delegate.get().and(value);
}
@Override
return delegate.get().or(value);
}
@Override
return delegate.get().xor(value);
}
@Override
return delegate.get().andNot(value);
}
@Override
public int intValue() {
return delegate.get().intValue();
}
@Override
public long longValue() {
return delegate.get().longValue();
}
@Override
public float floatValue() {
return delegate.get().floatValue();
}
@Override
public double doubleValue() {
return delegate.get().doubleValue();
}
@Override
return delegate.get().compareTo(value);
}
@Override
return delegate.get().min(value);
}
@Override
return delegate.get().max(value);
}
@Override
public int hashCode() {
return delegate.get().hashCode();
}
@Override
public boolean equals
(Object x
) { return delegate.get().equals(x);
}
@Override
return delegate.get().toString();
}
@Override
public String toString
(int radix
) { return delegate.get().toString(radix);
}
@Override
return delegate.get().gcd(value);
}
@Override
return delegate.get().multiply(value);
}
@Override
return delegate.get().pow(exp);
}
@Override
return delegate.get().divideAndRemainder(divisor);
}
@Override
return delegate.get().divide(divisor);
}
@Override
return delegate.get().remainder(divisor);
}
@Override
return delegate.get().modInverse(m);
}
@Override
return delegate.get().modPow(exponent, modulus);
}
@Override
return delegate.get().mod(m);
}
@Override
public boolean isProbablePrime(int certainty) {
return delegate.get().isProbablePrime(certainty);
}
@Override
return delegate.get().nextProbablePrime();
}
@Override
public byte byteValue() {
return delegate.get().byteValue();
}
@Override
public short shortValue() {
return delegate.get().shortValue();
}
}
}