const int buffer_max_size=100000;
struct quick_in{
char buf[buffer_max_size];
char *ps;char *pe;
quick_in(){
ps=buf;pe=buf+1;
}
inline void innext(){
if(++ps==pe)
pe=(ps=buf)+fread(buf,sizeof(char),sizeof(buf)/sizeof(char),stdin);
}
template <class T>
inline bool operator()(T &n){
n=0;
T f=1;
if(ps==pe)return false;//EOF
do{
innext();if(*ps==' ')f=-1;
}
while(ps!=pe&&!isdigit(*ps));
if(ps==pe)return false;//EOF
do{
n=(n<<1)+(n<<3)+*ps-48;
innext();
}
while(ps!=pe&&isdigit(*ps));n*=f;
return true;
}
inline char getchar(){
while(ps!=pe&&isspace(*ps))innext();
char c=*ps;innext();return c;
}
inline bool isenter(char c){return c=='\n';}
void gets(char *s){
while(ps!=pe&&isspace(*ps)) innext();
while(ps!=pe&&!isenter(*ps)){
*s++=*ps;innext();
}
*s=0;
}
};
quick_in in;