import java.io.IOException; import java.io.InputStream; import java.io.PrintWriter; import java.util.ArrayList; import java.util.Arrays; import java.util.NoSuchElementException; class DJSet { int n; int[] upper; public DJSet(int n) { this.n=n; upper=new int[n]; Arrays.fill(upper, -1); } int root(int x) { return upper[x]<0?x:(upper[x]=root(upper[x])); } boolean equiv(int x,int y) { return root(x)==root(y); } void setUnion(int x,int y) { x=root(x);y=root(y); if (x==y) return; if (upper[x]=MOD?a+b-MOD:a+b; } long gcd(long a,long b) { return a==0?b:gcd(b%a,a); } long pow_mod(long a,long n,long p) { long ret=1; for (;n>0;n>>=1,a=a*a%p) if(n%2==1) ret=ret*a%p; return ret; } long primitive_root(long p) { if (p==2) return 1; out:for (long root=2;root Integer.MAX_VALUE) throw new NumberFormatException(); return (int) nl; } public double nextDouble() { return Double.parseDouble(next());} }