inline int read()
{
char ch = getchar(); int x = 0, f = 1;
while(ch < '0' || ch > '9') {if(ch == '-') f = -1; ch = getchar();}
while('0' <= ch && ch <= '9') {x = x * 10 + ch - '0'; ch = getchar();}
return x * f;
}
//x=read()
struct Istream
{
template <class T>
Istream &operator >>(T &x)
{
static char ch;
static bool neg;
for(ch = neg = 0; ch < '0' || '9' < ch; neg |= ch == '-', ch = getchar());
for(x = 0; '0' <= ch && ch <= '9'; (x *= 10) += ch - '0', ch = getchar());
x = neg ? -x : x;
return *this;
}
} fin;
struct Ostream
{
template <class T>
Ostream &operator <<(T x)
{
x < 0 && (putchar('-'), x = -x);
static char stack[233];
static int top;
for(top = 0; x; stack[++top] = x % 10 + '0', x /= 10);
for(top == 0 && (stack[top = 1] = '0'); top; putchar(stack[top--]));
return *this;
}
Ostream &operator <<(char ch)
{
putchar(ch);
return *this;
}
} fout;
//fin>>x;
//fout<<x;
template <class T>
void read(T &x)
{
static char ch;
static bool neg;
for(ch = neg = 0; ch < '0' || '9' < ch; neg |= ch == '-', ch = getchar());
for(x = 0; '0' <= ch && ch <= '9'; (x *= 10) += ch - '0', ch = getchar());
x = neg ? -x : x;
}
//read(x);