import java.math.BigInteger;
import java.util.Scanner;
public class 大数开方2 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
for (int i = 0; i < 20; i++) {
BigInteger n=BigInteger.valueOf(i);
System.out.println(sqrt(n));
}
}
private static BigInteger sqrt(BigInteger n) {
BigInteger a;
BigInteger b;
//a为10的,n的长度除以二的,十次方
a=BigInteger.TEN.pow((int)n.toString().length()/2);
//b=n/a
b=n.divide(a);
//如果,a!=b,或者a和b的差相差不为0
while(!(a.equals(b)||a.equals(b.add(new BigInteger("-1")))||b.equals(a.add(new BigInteger("-1"))))){
//a=(a+b)/2
a=a.add(b).divide(new BigInteger("2"));
//b=n/a;
b=n.divide(a);
}
//取a,b中较小的一个
if (a.equals(b.add(new BigInteger("-1")))) {
return a;
}
return b;
}
}