import java.io.ByteArrayInputStream;import java.io.IOException;import java.io.InputStream;import java.io.PrintWriter;import java.util.Arrays;import java.util.InputMismatchException;publicclassMain{privatestaticfinal String NO ="NO";privatestaticfinal String YES ="YES";
InputStream is;
PrintWriter out;
String INPUT ="";privatestaticfinallong MOD =998244353L;voidrun()throws Exception {
is = INPUT.isEmpty()? System.in :newByteArrayInputStream(INPUT.getBytes());
out =newPrintWriter(System.out);long s = System.currentTimeMillis();solve();
out.flush();if(!INPUT.isEmpty())tr(System.currentTimeMillis()- s +"ms");}publicstaticvoidmain(String[] args)throws Exception {newMain().run();}privatebyte[] inbuf =newbyte[1024];publicint lenbuf =0, ptrbuf =0;privateboolean vis[];privateintreadByte(){if(lenbuf ==-1)thrownewInputMismatchException();if(ptrbuf >= lenbuf){
ptrbuf =0;try{
lenbuf = is.read(inbuf);}catch(IOException e){thrownewInputMismatchException();}if(lenbuf <=0)return-1;}return inbuf[ptrbuf++];}privatebooleanisSpaceChar(int c){return!(c >=33&& c <=126);}privateintskip(){int b;while((b =readByte())!=-1&&isSpaceChar(b));return b;}privatedoublend(){return Double.parseDouble(ns());}privatecharnc(){return(char)skip();}private String ns(){int b =skip();
StringBuilder sb =newStringBuilder();while(!(isSpaceChar(b))){// when nextLine, (isSpaceChar(b) && b != '// ')
sb.appendCodePoint(b);
b =readByte();}return sb.toString();}privatechar[]ns(int n){char[] buf =newchar[n];int b =skip(), p =0;while(p < n){if(!(isSpaceChar(b)))
buf[p++]=(char) b;
b =readByte();}return n == p ? buf : Arrays.copyOf(buf, p);}privatechar[][]nm(int n,int m){char[][] map =newchar[n][];for(int i =0; i < n; i++)
map[i]=ns(m);return map;}privateint[]na(int n){int[] a =newint[n];for(int i =0; i < n; i++)
a[i]=ni();return a;}private Integer[]na2(int n){
Integer[] a =newInteger[n];for(int i =0; i < n; i++)
a[i]=ni();return a;}privateint[][]na(int n,int m){int[][] a =newint[n][];for(int i =0; i < n; i++)
a[i]=na(m);return a;}private Integer[][]na2(int n,int m){
Integer[][] a =newInteger[n][];for(int i =0; i < n; i++)
a[i]=na2(m);return a;}privateintni(){int num =0, b;boolean minus =false;while((b =readByte())!=-1&&!((b >='0'&& b <='9')|| b =='-'));if(b =='-'){
minus =true;
b =readByte();}while(true){if(b >='0'&& b <='9'){
num = num *10+(b -'0');}else{return minus ?-num : num;}
b =readByte();}}privatelongnl(){long num =0;int b;boolean minus =false;while((b =readByte())!=-1&&!((b >='0'&& b <='9')|| b =='-'));if(b =='-'){
minus =true;
b =readByte();}while(true){if(b >='0'&& b <='9'){
num = num *10+(b -'0');}else{return minus ?-num : num;}
b =readByte();}}privatestaticvoidtr(Object... o){
System.out.println(Arrays.deepToString(o));}}