#include<iostream>
#include<string>
#include<set>
#include<utility>
#include<vector>
#include<map>
#include<algorithm>
#include<queue>
#include<stack>
#include<bits/stdc++.h>
#include"gap.h"
using namespace std;
long long findGap(int T, int N){
long long ans = 0;
if(T == 1){
vector<long long> a;
long long s = 0, t = 1000000000000000000LL;
while (true)
{
long long mn, mx;
if(s > t) break;
MinMax(s, t, &mn, &mx);
if(mn == -1) break;
if(mn < mx){
a.push_back(mn);
a.push_back(mx);
s = mn + 1;
t = mx - 1;
}
if(mn == mx){
a.push_back(mn);
break;
}
}
assert(a.size() == N):
sort(a.begin(), a.end());
for(int i=0; i<N-1; i++){
ans = max(ans, a[i+1] - a[i]);
}
}
return ans;
}
//using namespace std;
/*
int dp[3001][3001] = {};
int main(){
string s, t;
cin >> s >> t;
for(int i=1; i<=s.size(); i++){
for(int j=1; j<=t.size(); j++){
if(s[i-1] == t[j-1]){
dp[i][j] = dp[i-1][j-1] + 1;
}
else{
if(dp[i][j-1] < dp[i-1][j]){
dp[i][j] = dp[i-1][j];
}
else if(dp[i][j-1] < dp[i-1][j]){
dp[i][j] = dp[i][j-1];
}
}
}
}
string ans;
int li = s.size()+1, lj = t.size()+1;
for(int i=s.size(); i>=0; i--){
for(int j=t.size(); j>=0; j--){
if(dp[i][j] == dp[i-1][j]){
}
else if(dp[i][j] == dp[i][j-1]){
}
}
}
reverse(ans.begin(), ans.end());
if(ans.size() == 0){
cout << " " << endl;
}
else{
cout << ans << endl;
}
return 0;
}
*/
/*
if(dp[i][j] > dp[i-1][j-1] && dp[i-1][j-1] == dp[i][j-1] && dp[i-1][j-1] == dp[i-1][j]){
if(i<=li && j<=lj){
ans += s[i-1];
li = i;
lj = j;
}
}
int main(){
int N;
cin >> N;
cout << N%11 << endl;
}
*/
/*
int main(){
int N;
cin >> N;
int ans = 0;
for(int i=0;; i++){
ans = i;
if(i*i > N){
ans--;
break;
}
}
cout << ans << endl;
return 0;
}
*/
/*
int main(){
string s;
cin >> s;
for(int i=1; i<=s.size(); i++){
cout << i << endl;
}
return 0;
}
*/
/*
int N, W;
int w[100], v[100];
int dp[100][1000];
int solve(int now, int m){
if(now == N) return 0;
}
int main(){
cin >> N >> W;
for(int i=0; i<N ; i++){
cin >> w[i] >> v[i];
}
return 0;
}
*/
/*
vector<char> seg;
int K, n, size;
void update(int i, char x){
i += n-1;
seg[i] = x;
while(i>0){
i = (n-1)/2;
seg[i] = min(seg[2*i+1], seg[2*i+2]);
}
}
int smaller(int a, int now, int l, int r){
int b = a + K;
if(r <= a || b <= l) return 0;
if(a <= l && r <= b){
if(seg[a] < seg[now]){
int tmp = now;
while (tmp >= n - 1)
{
tmp = 2*now + 1;
if(seg[tmp] == seg[now]){}
if(seg[tmp+1] == seg[now]) tmp++;
}
return tmp;
}
}
else{
int a1 = smaller(a, 2*now+1, l, (l+r)/2);
int a2 = smaller(a, 2*now+1, (l+r)/2, r);
if(seg[a] < seg[a1]){
if(seg[a1] < seg[a2]){
return a2;
}
else{
return a1;
}
}
}
}
int main(){
string s;
cin >> s >> K;
size = 1;
while (size < s.size())
{
size *= 2;
}
size = 2*size - 1;
n = (1+size)/2;
for(int i=0; i<size; i++){
seg.push_back('z');
}
for(int i=0; i<s.size(); i++){
update(i, s[i]);
}
int now = 0;
while (K>0)
{
int tmp = smaller(now, 0, 0, n);
}
return 0;
}
*/
/*
int N, q;
vector<int> seg;
int segSize = 2;
int n;
void add(int x, int y){
x += n - 1;
seg[x] += y;
while(x > 0){
x = (x-1)/2;
seg[x] = seg[2*x+1] + seg[2*x+2];
}
}
int sum(int a, int b, int k, int l, int r){
if(r <= a || b <= l) return 0;
if(a <= l && r <= b){
return seg[k];
}
else{
return sum(a, b, 2*k+1, l, (l+r)/2 ) + sum(a, b, 2*k+2, (l+r)/2, r);
}
}
int main(){
cin >> N >> q;
while(segSize < N){
segSize *= 2;
}
segSize *= 2;
segSize--;
n = (segSize+1)/2;
for(int i=0; i<segSize; i++){
seg.push_back(0);
}
for(int i=0; i<q; i++){
int com, x, y;
cin >> com >> x >> y;
if(com == 0){
add(x-1, y);
}
if(com == 1){
cout << sum(x-1, y, 0, 0, n) << endl;
}
}
return 0;
}
*/
/*
long long K, A, B;
long long ans = 0;
int main() {
cin >> K >> A >> B;
if (A + 1 < B) {
if (K + 1 > A + 1) {
ans += B;
K -= A + 1;
ans += K / (A + 2) * B;
ans += K % (A + 2);
}
}
else {
ans = K + 1;
}
cout << ans << endl;
return 0;
}
*/
/*
int N, W;
long long w[100], v[100] = {};
long long dp[101][100100];
int main(){
cin >> N >> W;
for(int i=0; i<=N; i++){
if(i<N)
cin >> w[i] >> v[i];
for(int j=0; j<=100000; j++){
dp[i][j] = 99999999999LL;
}
}
for(int i=0; i<=N; i++){
dp[i][0] = 0;
}
for(int i=1; i<=N; i++){
for(int j=1; j<=100000; j++){
dp[i][j] = j-v[i-1] < 0 ? dp[i-1][j] : min(dp[i-1][j], dp[i-1][j-v[i-1]] + w[i-1]);
}
}
int ans = 0;
for(int i=0; i<=100000; i++){
if(dp[N][i] <= W){
ans = max(ans, i);
}
}
cout << ans << endl;
for(int i=1; i<=N; i++){
for(int j=1; j<=100*N; j++){
cout << dp[i][j] << " ";
}
cout << endl;
}
return 0;
}
*/
/*
int N, W;
long long w[111], v[111];
long long dp[111][111111];
long long solve(int now, int m){
if(m > W) return -999999999999;
if(now == N) return 0;
if(dp[now][m] != -1) return dp[now][m];
dp[now][m] = max(solve(now+1, m), solve(now+1, m + w[now]) + v[now]);
return dp[now][m];
}
int main(){
cin >> N >> W;
for(int i=0; i<N; i++){
cin >> w[i] >> v[i];
for(int j=0; j<W; j++){
dp[i][j] = -1;
}
}
cout << solve(0, 0) << endl;
return 0;
}
*/
/*
int N;
int ABC[100001][3] = {};
int dp[100001][3];
int solve(int now, int m){
if(now == N+1) return 0;
if(dp[now][m] != -1) return dp[now][m];
dp[now][m] = max(solve(now + 1, (m+1)%3) + ABC[now][(m+1)%3], solve(now + 1, (m+2)%3) + ABC[now][(m+2)%3]);
return dp[now][m];
}
int main(){
cin >> N;
for(int i=1; i<=N; i++){
cin >> ABC[i][0] >> ABC[i][1] >> ABC[i][2];
}
for(int i=0; i<=N; i++){
for(int j=0; j<3; j++){
dp[i][j] = -1;
}
}
cout << solve(0, 0) << endl;
return 0;
}
*/
/*
int N, K;
int h[100000];
int dp[100000];
int solve(int now){
if(now == N-1) return 0;
if(now >= N-1){
return 9999999999;
}
if(dp[now] != -1) return dp[now];
int tmp = 9999999999;
for(int i=1; i<=K; i++){
tmp = min(abs(h[now+i] - h[now]) + solve(now+i), tmp);
}
dp[now] = tmp;
return dp[now];
}
int main(){
cin >> N >> K;
for(int i=0; i<N; i++){
cin >> h[i];
dp[i] = -1;
}
cout << solve(0) << endl;
return 0;
}
*/
/*
int N;
int h[100000];
int dp[100000];
int solve(int now){
if(now == N-1) return 0;
if(dp[now] != -1) return dp[now];
if(now == N-2){
dp[now] = abs(h[now+1] - h[now]) + solve(now+1);
}
else{
dp[now] = min(abs(h[now+1] - h[now]) + solve(now+1), abs(h[now+2] - h[now]) + solve(now+2));
}
return dp[now];
}
int main(){
cin >> N;
for(int i=0; i<N; i++){
cin >> h[i];
dp[i] = -1;
}
cout << solve(0) << endl;
return 0;
}
*/
/*
int D, N;
int T[200], A[200], B[200], C[200];
int dp[100][100];
int solve(int now, int m){ //now:日数 m:派手さの差の絶対値の合計
if(now == N) return 0;
if(dp[now][m]
}
int main(){
cin >> D >> N;
for(int i=0; i<D; i++){
cin >> T[i];
}
for(int i=0; i<N; i++){
cin >> A[i] >> B[i] >> C[i];
}
return 0;
}
*/
/*
//6
int N;
int A[100];
int dp[100][200];
int solve(int now, int m, int B[100]){
if(now == N){
return 1;
}
dp[now][m] = 0;
for(int i=0; i<N; i++){
if(B[i]>0 && i != m-1 && i != m && i != m+1){
B[i]--;
dp[now][m] += solve(now+1, i, B);
B[i]++;
}
}
dp[now][m] %= 10007 ;
return dp[now][m];
}
int main(){
cin >> N;
for(int i=0; i<N; i++){
cin >> A[i];
for(int j=0; j<200; j++){
dp[i][j] = -1;
}
}
cout << solve(0, 200, A);
return 0;
}
*/
/*
//5
int N, M;
int A[200000], l[200000], r[200000];
vector<int> max1[200000] = {};
int tmp[4000][3] = {};
int ok[200000] = {};
int main(){
cin >> N >> M;
for(int i=0; i<N; i++){
cin >> A[i];
}
for(int i=0; i<M; i++){
cin >> l[i] >> r[i];
l[i]--;
r[i]--;
for(int j = l[i]; j<=r[i]; j++){
ok[j]++;
}
}
tmp[0][0] = tmp[0][1] = 0;
for(int i=1; i<=N; i++){
if(ok[i-1] == 0){
tmp[i][0] += A[i-1] + tmp[i-1][1] + tmp[i-1][2];
tmp[i][1] = tmp[i][0];
}
else if(ok[i-1] == 1){
tmp[i][1] += max(A[i-1] + tmp[i-1][0], tmp[i-1][1]);
tmp[i][0] = tmp[i-1][0];
}
else if(ok[i-1] == 2){
tmp[i][1] = tmp[i-1][1];
tmp[i][2] = max(tmp[i-1][1], tmp[i-1][2]);
}
}
cout << tmp[N][0] << endl;
return 0;
}
*/
//4
/*
int N;
int A[100000];
int main(){
cin >> N;
vector<int> x, y, z; //xは頂、yは谷、zは合わせたやつ
cin >> A[0];
int B[100001];
B[0] = 0;
for(int i=1; i<N; i++){
cin >> A[i];
B[i] = A[i] - A[i-1];
if(B[i-1] * B[i] < 0){
if(B[i-1] > 0){
x.push_back(A[i-1]);
z.push_back(A[i-1]);
}
else if(B[i-1] < 0){
y.push_back(A[i-1]);
z.push_back(A[i-1]);
}
}
else if(B[i] == 0){
if(B[i-1] > 0){
x.push_back(A[i-1]);
z.push_back(A[i-1]);
}
else if(B[i-1] < 0){
y.push_back(A[i-1]);
z.push_back(A[i-1]);
}
}
}
if(B[1] < 0){
x.push_back(A[0]);
z.push_back(A[0]);
}
if(B[N-1] > 0){
x.push_back(A[N-1]);
z.push_back(A[N-1]);
}
sort(x.begin(), x.end());
sort(y.begin(), y.end());
sort(z.begin(), z.end());
if(y[0] == A[N-1]) y.erase(y.begin());
reverse(x.begin(), x.end());
reverse(y.begin(), y.end());
reverse(z.begin(), z.end());
int xi = 0, yi = 0;
int tmp = 0;
int ans = 0;
for(int i=0; i<z.size(); i++){
if(z[i] == y[yi]){
tmp--;
yi++;
if(yi >= y.size()) yi--;
}
else if(z[i] == x[xi]){
tmp++;
xi++;
if(xi >= x.size()) xi--;
}
ans = max(ans, tmp);
}
cout << ans << endl;
return 0;
}
*/
/*
//3
int N;
string s;
int main(){
cin >> N >> s;
int ans = 0;
for(int i=1; i<N; i++){
if(s[i-1] != s[i]){
ans++;
i++;
}
}
cout << ans << endl;
return 0;
}
*/
/*
//2
int main(){
int N, M;
int X[100];
cin >> N;
for(int i=0; i<N; i++){
cin >> X[i];
}
cin >> M;
for(int i=0; i<M; i++){
int a;
cin >> a;
a--;
for(int j = 0; j<N; j++){
if(X[a] + 1 == X[j]){
break;
}
else if(j == N -1){
X[a]++;
}
}
if(X[a] > 2019) X[a] = 2019;
}
for(int i=0; i<N; i++){
cout << X[i] << endl;
}
return 0;
}
*/
/*
//1
int main(){
int a, b, c;
cin >> a >> b >> c;
int week = c/(7*a+b);
int tmp = c%(7*a+b);
int ans = tmp/a;
if(tmp%a != 0) ans++;
cout << min(ans + 7*week, 7*(week+1) ) << endl;
return 0;
}
*/
/*
int N;
int x[3000], y[3000];
int main(){
cin >> N;
for(int i=0; i<N; i++){
cin >> x[i] >> y[i];
}
for(int i=0; i<N; i++){
for(int j=i+1; j<N; j++){
for(int k=j+1; k<N; k++){
for(int l=k+1; l<0; l++){
int wide = max(abs(x[i]-x[j]), max(abs(x[i]-x[k]), max(abs(x[i] - x[l]), max(abs(x[j]-x[k]), max(abs(x[j] - x[l]), abs(x[k]-x[l]))))));
int height = max(abs(y[i]-y[j]), max(abs(y[i]-y[k]), max(abs(y[i] - y[l]), max(abs(y[j]-y[k]), max(abs(y[j] -y[l]), abs(y[k]-y[l]))))));
if(wide == height){
}
}
}
}
}
return 0;
}
*/
//最長の階段
/*
int N, k;
int num[100000];
bool empty = false;
int sizes[100000][2] = {};
int main(){
cin >> N >> k;
for(int i=0; i<k; i++){
int tmp;
cin >> tmp;
if(tmp==0) empty = true;
else num[i] = tmp;
}
sort(num, num+k);
sizes[0][0] = 0;
for(int i=1; i<=k; i++){
int x = num[i] - num[i-1];
if(x == 1){
sizes[i][0] = sizes[i-1][0] + 1;
sizes[i][1] = sizes[i-1][1] + 1;
}
else if(x == 2 && empty == true){
sizes[i][1] = sizes[i-1][0] + 2;
}
else{
sizes[i][0] = 0;
sizes[i][1] = 0;
}
}
int ans = 0;
for(int i=0; i<k; i++){
for(int j=0; j<2; j++){
ans = max(ans, sizes[i][j]);
}
}
cout << ans+1 << endl;
return 0;
}
*/
/*
int N, F;
vector<string> sets[100];
set<string> items;
vector<pair<string, string>> pairs;
int main(){
cin >> N >> F;
for(int i=0; i<N; i++){
int m;
cin >> m;
for(int j=0; j<m; j++){
string tmp;
cin >> tmp;
sets[i].push_back(tmp);
items.insert(tmp);
}
}
vector<string> kind;
for(auto itr = items.begin(); itr != items.end(); itr++){
kind.push_back(*itr);
}
for(auto i=0; i<kind.size(); i++){
for(auto j=1+i; j<kind.size(); j++){
for(int k=0; k<N; k++){
int ok1 = 0;
for(int l=0; l<sets[k].size(); l++){
if(kind[i] == sets[k][l]){
ok1++;
}
if(kind[j] == sets[k][l]){
ok1++;
}
}
if(ok1 == 2){
pairs.push_back(make_pair(kind[i], kind[j]));
}
}
}
}
set<pair<string, string>> ans;
for(int i=0; i<pairs.size(); i++){
int tmp = 0;
for(int j=i++; j<pairs.size(); j++){
if(pairs[i] == pairs[j]){
tmp++;
}
}
if(tmp>=F){
ans.insert(pairs[i]);
}
}
cout << ans.size() << endl;
for(auto i=ans.begin(); i!=ans.end(); i++){
pair<string, string> tmp = *i;
cout << tmp.first << " " << tmp.second << endl;
}
return 0;
}
*/
/*
int h[10], w[10];
vector<int> sh, sw;
int main(){
bool ok = true;
for(int i=0; i<6; i++){
int htmp, wtmp;
cin >> htmp >> wtmp;
if(htmp < wtmp){
h[i] = htmp;
w[i] = wtmp;
}
else{
h[i] = wtmp;
w[i] = htmp;
}
}
for(int i=0; i<5; i++){
for(int j=i+1; j<6; j++){
if(h[i] == h[j] && w[i] == w[j] && h[i]>0){
sh.push_back(h[i]);
sw.push_back(w[i]);
h[i] = h[j] = w[i] = w[j] = -1;
break;
}
}
}
if(sw.size() != 3){
ok = false;
cout << "no" << endl;
}
for(int i=0; i<2; i++){
for(int j=i+1; j<3; j++){
if(sh[i] == sh[j] && sh[i] != -1){
sh[i] = sh[j] = -1;
}
else if(sh[i] == sw[j] && sh[i] != -1){
sh[i] = sw[j] = -1;
}
else if(sw[i] == sh[j] && sw[i] != -1){
sw[i] = sh[j] = -1;
}
else if(sw[i] == sw[j] && sw[i] != -1){
sw[i] = sw[j] = -1;
}
else if(j == 2){
ok = false;
cout << "no" << endl;
}
}
}
if(ok) cout << "yes" << endl;
return 0;
}
*/
/*
int N;
int lc[100], rc[100], p[100], dp[100];
int root;
vector<int> leaves;
int dpth(int now){
if(now == root) return 0;
return dpth( p[now] ) + 1;
}
int hgt(int now){
for(int i=0; i<leaves.size(); i++){
if(now == leaves[i]) return 0;
}
if(dp[now] != -1) return dp[now];
dp[now] = (max(hgt(lc[now]), hgt(rc[now])) + 1);
return dp[now];
}
void print(int id){
cout << "node " << id << ": ";
cout << "parent = " << p[id] << ", ";
cout << "sibling = ";
if(p[id] == -1) cout << -1;
else if(lc[ p[id] ] != id) cout << lc[ p[id] ];
else if(rc[ p[id] ] != id) cout << rc[ p[id] ];
else cout << -1;
cout << ", ";
cout << "degree = ";
int tmp = 0;
if(lc[id] != -1) tmp++;
if(rc[id] != -1) tmp++;
cout << tmp << ", ";
cout << "depth = " << dpth(id) << ", ";
cout << "height = " << hgt(id) << ", ";
if(p[id] == -1) cout << "root";
else if(lc[id] == -1 && rc[id] == -1) cout << "leaf";
else cout << "internal node";
cout << endl;
}
int main(){
cin >> N;
for(int i=0; i<N; i++){
lc[i] = rc[i] = p[i] = dp[i] = -1;
}
for(int i=0; i<N; i++){
int id, left, right;
cin >> id >> left >> right;
lc[id] = left;
rc[id] = right;
p[left] = id;
p[right] = id;
}
for(int i=0; i<N; i++){
if(p[i] == -1) root = i;
if(lc[i] == -1 && rc[i] == -1) leaves.push_back(i);
}
for(int i=0; i<N; i++){
print(i);
}
return 0;
}
*/
/*
int N;
int parent[100000], Left[100000], Right[100000];
int d[100000];
void rec(int u, int p){
d[u] = p;
if(Right[u] != -1) rec(Right[u], p);
if(Left[u] != -1) rec(Left[u], p+1);
}
void print(int n){
cout << "node " << n;
cout << ": parent = "<< parent[n];
cout << ", depth = "<< d[n] << ", ";
if(parent[n] == -1) cout << "root";
else if(Left[n] == -1) cout << "leaf";
else cout << "internal node";
cout << ", [";
int c = Left[n];
for(int i=0; c != -1; i++){
if(i) cout << ", ";
cout << c;
c = Right[c];
}
cout << "]" << endl;
}
int main(){
cin >> N;
for(int i=0; i<N; i++){
parent[i] = Left[i] = Right[i] = -1;
}
for(int i=0; i<N; i++){
int id, k, l;
cin >> id >> k;
for(int j=0; j<k; j++){
int c;
cin >> c;
if(j == 0){
Left[id] = c;
}
else{
Right[l] = c;
}
l = c;
parent[c] = id;
}
}
int r;
for(int i=0; i<N; i++){
if(parent[i] == -1) r = i;
}
rec(r, 0);
for(int i=0; i<N; i++) print(i);
return 0;
}
*/
//カードゲーム
/*
int main(){
int N;
cin >> N;
vector<int> Taro, Hana;
for(int i=0; i<N; i++){
int tmp;
cin >> tmp;
Taro.push_back(tmp);
}
sort(Taro.begin(), Taro.end());
for(int i=1; i<=2*N; i++){
for(int j=0; j<N; j++){
if(i == Taro[j]){
break;
}
else if(j = N-1){
Hana.push_back(i);
}
}
}
int TaroSize = Taro.size();
int HanaSize = Hana.size();
bool taroturn = true;
int now = 0;
while(TaroSize != 0 && HanaSize != 0){
if(taroturn){
for(int i=0; i<TaroSize; i++){
if(now < Taro[i]){
now = Taro[i];
taroturn = false;
}
}
}
else{
}
}
return 0;
}
*/
//サッカー
/*
int main(){
int N;
cin >> N;
int X[4][3] = {};
for(int i=0; i<N*(N-1)/2; i++){
int a, b, c, d;
cin >> a >> b >> c >> d;
a--;
b--;
if(c>d){
X[a][0]++;
X[b][1]++;
}
if(c == d){
X[a][2]++;
X[b][2]++;
}
if(c<d){
X[a][0]++;
X[b][1]++;
}
}
return 0;
}
*/
//すごろく
/*
int main(){
int N, M;
cin >> N >> M;
int Place[1000];
for(int i=0; i<N; i++){
cin >> Place[i];
}
int ans;
int now = 0;
for(int i=0; i<M; i++){
int sai;
cin >> sai;
now += sai;
now += Place[now];
if(now >= N-1){
ans = i + 1;
break;
}
}
cout << ans << endl;
return 0;
}
*/
//鉛筆
/*
int main(){
int N, a, b, c, d;
cin >> N >> a >> b >> c >> d;
/*
int x, y;
for(int i=1; i*a < N; i++){
x = i*b;
}
for(int i=1; i*c < N; i++){
y = i*d;
}
x += b;
y += d;*/
/*
int x = N/a * b;
if(N%a != 0) x += b;
int y = N/c * d;
if(N%c != 0) y += d;
if(x>y) x = y;
cout << x << endl;
return 0;
}
*/
/*
int main(){
int a, b, c, d, e;
cin >> a >> b >> c >> d >> e;
int ans = 0;
if(a<0){
ans += c * abs(a) + d;
a = 0;
}
ans += (b-a)*e;
cout << ans << endl;
return 0;
}
*/
/*
//科目選択
int main(){
int a, b, c, d, e, f;
cin >> a >> b >> c >> d >> e >> f;
if(e < f) e = f;
int sum = a + b + c + d;
if(a>b) a = b;
if(a>c) a = c;
if(a>d) a = d;
cout << sum - a + e << endl;
return 0;
}
*/
//最大の和
/*
int main(){
while(true){
int k;
int A[100000];
int N;
cin >> N >> k;
if(N == 0 && k == 0) break;
A[0] = 0;
for(int i=1; i<=N; i++){
cin >> A[i];
A[i] = A[i] + A[i-1];
}
int ans = -99999999;
for(int i=1; i+k-1<N; i++){
ans = max(ans, A[i+k-1] - A[i-1]);
}
cout << ans << endl;
}
return 0;
}
*/
//フィボナッチ数列
/*
int dp[100];
int N;
int solve(int n){
if(dp[n] != -1) return dp[n];
dp[n] = solve(n-2) + solve(n-1);
return dp[n];
}
int main(){
cin >> N;
for(int i=0; i<100; i++){
dp[i] = -1;
}
dp[0] = 1;
dp[1] = 1;
cout << solve(N) << endl;
return 0;
}
*/
/*
//Longest Common Subsequence
int c[1001][1001];
int lcs(string X, string Y){
int m = X.size();
int n = Y.size();
int maxl = 0;
X = ' ' + X;
Y = ' ' + Y;
for(int i=0; i<=m; i++){
for(int j=0; j<=n; j++){
c[i][j] = 0;
}
}
//for(int i=1; i<=m; i++) c[i][0] = 0;
//for(int i=1; i<=n; i++) c[0][i] = 0;
for(int i=1; i<=m; i++){
for(int j=1; j<=n; j++){
if(X[i] == Y[j]){
c[i][j] = c[i-1][j-1] + 1;
}
else{
c[i][j] = max(c[i-1][j], c[i][j-1]);
}
maxl = max(c[i][j], maxl);
}
}
return maxl;
}
int main(){
int q;
cin >> q;
string X, Y;
for(int i=0; i<q; i++){
cin >> X >> Y;
cout << lcs(X, Y) << endl;
}
return 0;
}
/*
int main(){
/*
int x,y;
cin >> x >> y;
cout << x << " + " << y << " = " << x+y << endl;
cout << x << " - " << y << " = " << x-y << endl;
cout << x << " * " << y << " = " << x*y << endl;
cout << x << " / " << y << " = " << x/y << endl;
cout << x << " % " << y << " = " << x%y << endl;
*/
/*
int p;
cin >> p;
if(p<50){
cout << "Your grade is C" << endl;
}
else if(p >= 50 && p < 70){
cout << "Your grade is B" << endl;
}
else if(p >= 70 && p<100){
cout << "Your grade is A" << endl;
}
else if(p == 100){
cout << "Your grade is S" << endl;
}
*/
/*
string name;
double a, b, c, d, f;
cin >> name >> a >> b >> c >> d >> f;
double p = (5*a + 4*b + c*3 + d*2 + f)/(a + b + c + d + f);
cout << name << " ";
if(p == 5) cout << "Great!" << endl;
if(p >= 4&& p < 5) cout << "Very Good" << endl;
if(p >= 3&& p < 4) cout << "Good!" << endl;
if(p < 3) cout << "Poor!" << endl;
*/
/*
int aw, al, ah;
int bw, bl, bh;
int cw, cl, ch;
int dw, dl, dh;
int ew, el, eh;
cin >> aw >> al >> ah;
cin >> bw >> bl >> bh;
cin >> cw >> cl >> ch;
cin >> dw >> dl >> dh;
cin >> ew >> el >> eh;
int ap = aw - al;
int bp = bw - bl;
int cp = cw - cl;
int ap = dl;w - al;
int ap = aw - al;
return 0;
}
*/
//総当り
/*
int N, M;
int A[100];
int dp[100][100];
int solve(int now, int m){
if(m == 0) return 1;
if(now >= N) return 0;
if(dp[now][m] != -1) return dp[now][m];
if(solve(now+1, m) == 1){
dp[now][m] = 1;
}
else{
dp[now][m] = solve(now+1, m-A[now]);
}
return dp[now][m];
}
int main(){
cin >> N;
for(int i=0; i<N; i++){
cin >> A[i];
}
for(int i=0; i<N; i++){
for(int j=0; j<N; j++){
dp[i][j] = -1;
}
}
int q;
cin >> q;
for(int i=0; i<q; i++){
cin >> M;
if(solve(0, M) == 1){
cout << "yes" << endl;
}
else{
cout << "no" << endl;
}
}
return 0;
}
*/
//幅優先探索
/*
int N;
int M[101][101];
queue<int> que;
int cost[101];
void solve(int now){
for(int i=0; i<N; i++){
if(M[now][i] == 1){
if(cost[i] == -1){
cost[i] = cost[now] + 1;
que.push(i);
}
else if(cost[now] + 1 < cost[i]){
cost[i] = cost[now] + 1;
que.push(i);
}
}
}
}
int main(){
cin >> N;
for(int i=0; i<N; i++){
int u, k;
cin >> u >> k;
for(int j=0; j<k; j++){
int v;
cin >> v;
M[u-1][v-1] = 1;
}
}
for(int i=0; i<N; i++){
cost[i] = -1;
}
cost[0] = 0;
que.push(0);
while (!que.empty())
{
solve(que.front());
que.pop();
}
for(int i=0; i<N; i++){
cout << i+1 << " " << cost[i] << endl;
}
return 0;
}
*/
//深さ優先探索
/*
int N;
int M[101][101] = {};
int d[101] = {};
int f[101] = {};
int ct = 0;
void solve(int now){
if(d[now] == 0) d[now] = ct;
for(int i=1; i<=N; i++){
if(M[now][i] == 1 && d[i] == 0){
ct++;
solve(i);
}
if(i == N){
ct++;
f[now] = ct;
}
}
}
int main(){
cin >> N;
for(int i=1; i<=N; i++){
M[0][i] = 1;
}
for(int i=0; i<N; i++){
int u, k;
cin >> u >> k;
for(int j=0; j<k; j++){
int v;
cin >> v;
M[u][v] = 1;
}
}
solve(0);
for(int i=1; i<=N; i++){
cout << i << " " << d[i] << " " << f[i] << endl;
}
return 0;
}
*/
//グラフの表現
/*
int main(){
int n;
int M[101][101] = {};
cin >> n;
for(int i=0; i<n; i++){
int u, k;
cin >> u >> k;
for(int j=0; j<k; j++){
int v;
cin >> v;
M[u-1][v-1] = 1;
}
}
for(int i=0; i<n; i++){
for(int j=0; j<n; j++){
cout << M[i][j];
if(j != n-1){
cout << " ";
}
else{
cout << endl;
}
}
}
return 0;
}
*/
//二乗法
/*
int main(){
long long m,n;
int MOD = 1000000007;
cin >> m >> n;
long long ans = 1;
while(n != 0){
if(n%2 == 1){
ans *= m;
ans %= MOD;
}
n = n/2;
m = m*m;
m %= MOD;
}
cout << ans << endl;
return 0;
}
*/
//カードゲーム
/*
int n;
bool T[100], H[100];
int Tnum = n, Hnum = n;
int main (){
cin >> n;
for(int i=0; i<2*n; i++){
T[i] = false;
}
for(int i=0; i<n; i++){
int a;
cin >> a;
T[a] = true;
}
for(int i=0; i<n; i++){
if(!T[i]){
H[i] = true;
}
}
int now;
bool turn = true;
for(int i=0; i<n; i++){
if(T[i]){
now = i;
T[i] = false;
Tnum--;
turn = false;
break;
}
}
while(Tnum > 0 || Hnum > 0){
for(int i=0; i<n; i++){
if(T[i]){
now = i;
T[i] = false;
Tnum--;
turn = false;
break;
}
else if(H[i]){
now = i;
H[i] = false;
Hnum--;
turn = true;
break;
}
}
}
return 0;
}
*/
/*
int A[100];
int B[100];
int n;
int ansT, ansH;
int taro = n - 1, hana = n;
void solve(int c, bool b){
if(taro == 0){
ansT = hana;
return;
}
if(hana == 0 ){
ansH = taro;
return;
}
if(b){
for(int i=0; i<n; i++){
if(c < B[i]){
int a = B[i];
B[i] = -1;
hana--;
solve( a, !b);
return;
}
else if(i==n-1){
taro++;
solve(0 , !b);
}
}
}
else{
for(int i=0; i<n; i++){
if(c < A[i]){
int a = B[i];
A[i] = -1;
taro--;
solve( a, !b);
return;
}
else if(i==n-1){
taro++;
solve(0, !b);
}
}
}
}
int main(){
while(true){
cin >> n;
if(n == 0){
break;
}
for(int i=0; i<n; i++){
cin >> A[i];
}
sort(A, A+n);
int m = 0;
for(int i=0; i<n ; i++){
for(int j=B[m]+1; j<=2*n; j++){
if(A[i] != j){
B[m] = j;
m++;
}
}
}
solve(A[0], true);
cout << ansT << endl << ansH << endl;
}
return 0;
}
*/
//最高のピザ
/*
int n,a,b,c;
int A[110];
int dp[110][110];
int main(){
cin >> n >> a >> b >> c;
for(int i=1; i<=n; i++){
cin >> A[i];
}
for(int i=1; i<=n; i++){
for(int j=1; j<=n; j++){
dp[i][j] = max(dp[i-1][j], dp[i-1][j-1] + A[i]);
}
}
int ans = c/a;
for(int i=0; i<=n; i++){
ans = max(ans, (dp[n][i]+c)/(a + b*i) );
}
cout << ans << endl;
return 0;
}
*/
/*
int x = 0;
dp[0].first = 0;
for(int j=0; j<n; j++){
//X.push_back(temp);
if(dp[j].first < dp[j].first + A[j]){
dp[j+1].first = dp[j].first + A[j];
dp[j+1].second = x;
}
else{
dp[j+1] = dp[j];
}
//dp.push_back(-1);
}
int ans = 0;
for(int i=0; i<n+1; i++){
ans = max( (dp[i].first + c)/(dp[i].second * b + a), ans);
}
cout << ans << endl;
*/
//cout << solve(0) << endl;
//チーズ
/*
int h,w,n;
pair<int,int> factory[10];
int cost[1000][1000];
queue< pair<int,int> > que;
string S[1000];
int A[2][4] = {{-1, 1 ,0, 0}, {0, 0, -1, 1}};
void Solve(pair<int,int> Now){
for(int i = 0; i<4; i++){
int x = Now.first + A[0][i];
int y = Now.second + A[1][i];
if(x >= 0 && x < h&&y >= 0&&y < w && S[Now.first + A[0][i]][Now.second + A[1][i]] != 'X'){
if(cost[Now.first][Now.second] + 1 < cost[x ][y]){
cost[x][y] = cost[Now.first][Now.second] + 1;
que.push(make_pair(x, y));
}
}
}
//上
if(Now.first - 1 >= 0 && S[Now.first - 1][Now.second] != 'X'){
if(cost[Now.first][Now.second] + 1 < cost[Now.first - 1][Now.second]){
cost[Now.first - 1][Now.second] = cost[Now.first][Now.second] + 1;
que.push(make_pair(Now.first -1, Now.second));
}
}
//下
if(Now.first + 1 < h && S[Now.first + 1][Now.second] != 'X'){
if(cost[Now.first][Now.second] + 1 < cost[Now.first + 1][Now.second]){
cost[Now.first + 1][Now.second] = cost[Now.first][Now.second] + 1;
que.push(make_pair(Now.first + 1, Now.second));
}
}
//hidari
if(Now.second - 1 >= 0 && S[Now.first][Now.second - 1] != 'X'){
if(cost[Now.first][Now.second] + 1 < cost[Now.first][Now.second - 1]){
cost[Now.first][Now.second - 1] = cost[Now.first][Now.second] + 1;
que.push(make_pair(Now.first, Now.second - 1));
}
}
//r
if(Now.second +1 < w && S[Now.first][Now.second + 1] != 'X'){
if(cost[Now.first][Now.second] + 1 < cost[Now.first][Now.second + 1]){
cost[Now.first][Now.second + 1] = cost[Now.first][Now.second] + 1;
que.push(make_pair(Now.first , Now.second + 1));
}
}
}
int main(){
//チーズ
cin >> h >> w >> n;
for(int i=0; i<h; i++){
cin >> S[i];
}
for(int i=0; i<h; i++){
for(int j=0; j<w; j++){
if(S[i][j] == 'S'){
factory[0] = make_pair(i, j);
}
else if(S[i][j] != 'X' && S[i][j] != '.'){
factory[S[i][j]-'0'] = make_pair(i,j);
}
}
}
int ans = 0;
for(int i=0; i<n; i++){
for(int j=0; j<h; j++){
for(int k=0; k<w; k++){
cost[j][k] = 999999;
}
}
cost[factory[i].first][factory[i].second] = 0;
que.push(factory[i]);
while(!que.empty()){
Solve(que.front());
que.pop();
}
ans += cost[factory[i+1].first][factory[i+1].second];
}
cout << ans << endl;
return 0;
}
*/
//宝探し
/*
int n,m;
cin >> n >> m;
int A[5100][5100];
//A[0][0] = 0;
/*
for(int i=0; i<5000; i++){
for(int j=0; j<5000; j++){
//A[i+1][j+1] = A[i+1][j] + A[i][j+1] -A[;
}
}
*/
/*
int Px[5000],Py[5000];
for(int i=0; i<n; i++){
int x,y;
cin >> x >> y;
//A[x][y] = 1;
}
int B[5100][5100];
B[0][0] = 0;
for(int i=0; i<100; i++){
for(int j=0; j<100; j++){
B[i+1][j+1] = B[i+1][j] + B[i][j+1] - B[i][j] + A[i+1][j+1];
}
}
for(int i=0; i<m; i++){
int x,y,X,Y;
cin >> x >> y >> X >> Y;
cout << B[x][y] - B[X-1][Y-1] << endl;
}
*/
//超観光都市
/*
int w,h,n;
cin >> w >> h >> n;
int ans = 0;
int X,Y;
int x,y;
cin >> x >> y;
X = x;
Y = y;
for(int i=0; i<n-1; i++){
cin >> x >> y;
bool hugou = ((x-X>0&&y-Y>0)||(x-X<0&&y-Y<0));
if(hugou == 1){
ans += max(abs(x-X), abs(y-Y));
}
else{
ans += abs(x-X)+abs(y-Y);
}
X = x;
Y = y;
}
cout << ans << endl;
*/
//すごろく
/*
while(true){
int n,m;
cin >> n >> m;
if(n==0 && m==0) break;
int X[1000],Y;
for(int i=0 ; i<n; i++){
cin >> X[i];
}
int i,a=0;
for(i=0; i<m; i++){
cin >> Y;
a += Y;
a += X[a];
if(a+1>=n) break;
}
cout << i + 1<< endl;
}
*/
//看板(未完成)
/*
int n,Ans;
string name;
cin >> n >> name;
for(int i=0; i<n; i++){
string s;
cin >> s;
int x[100];
int l=0;
for(int j=0; j<name.size(); j++){
for(int k=0; k<s.size(); k++){
if(name[j]==s[k]){
x[l]=k;
l++;
}
}
}
int p=x[1]-x[0];
for(int j=1; j<l+1; j++){
if(p!=x[j]-x[j-1])
break;
}
}
*/
//サッカー
/*
int n;
cin >> n;
int P[100];
for(int i = 0; i<n; i++){
P[i]=0;
}
for(int i=0; i<n*(n-1)/2; i++){
int a,b,c,d;
cin >> a >> b >> c >> d;
if(c>d)
P[a-1] += 3;
if(c==d){
P[a-1]++;
P[b-1]++;
}
if(c<d)
P[b-1] += 3;
}
int Q[100];
for(int i =0; i<n; i++){
Q[i] = P[i];
}
sort(Q, Q+n);
reverse(Q,Q+n);
for(int i=0; i<n; i++){
for(int j=0; j<n; j++){
if(P[i]==Q[j]){
cout << j+1 << endl;
break;
}
}
}
*/
//気象予報士
/*
int h,w;
int x=-1;
cin >> h >> w;
for(int i=0; i<h; i++){
for(int j =0; j<w; j++){
char a;
cin >> a;
if(a=='c'){
cout << 0;
x = j;
}
else if(x != -1){
cout << j-x;
}
else
cout << -1;
if(j==w-1)
break;
cout << " ";
}
cout << endl;
x = -1;
}
*/
/*
//数あて
int n;
cin >> n;
int p[200][3];
for(int i=0;i<n;i++)
{
cin >> p[i][0] >> p[i][1] >> p[i][2];
}
int _p;
for(int k=0;k<3;k++)
{
for(int i=0;i<n;i++)
{
_p = p[i][k];
for(int j=i+1;j<n;j++)
{
if(_p == p[j][k])
{
p[i][k] = 0;
p[j][k] = 0;
}
}
}
}
for(int i=0;i<n;i++)
{
cout << p[i][0] + p[i][1] + p[i][2] << endl;
}
*/
/*
//得点
int ai,am,as,ae,bi,bm,bs,be;
cin >> ai >> am >> as >> ae >> bi >> bm >> bs >> be;
int answer=ai+am+as+ae;
if(answer < bi+bm+bs+be)
{
/ answer=bi+bm+bs+be;
}
cout << answer << endl;
*/
//おつり
/* int onum;
while(true){
int N;
cin >> N;
if(N == 0) break;
onum=0;
int oturi = 1000-N;
if(oturi >= 500)
{
onum++;
oturi -= 500;
}
while(oturi>=100)
{
onum++;
oturi -= 100;
}
if(oturi >= 50)
{
onum++;
oturi -= 50;
}
while(oturi>=10)
{
onum++;
oturi -= 10;
}
if(oturi >= 5)
{
onum++;
oturi -= 5;
}
while(oturi>=1)
{
onum++;
oturi -= 1;
}
cout << onum << endl;
}
*/
//レシート
/*
while(true){
int N;
cin >> N;
if(N==0) break;
int a[9];
for(int i=0;i<9;i++){
cin >> a[0];
}
}
/*
int N;
int i = 0;
while(i<N){
i++;
}
for(int i=0; i<N; i++)
*/
/*
int N;
int x;
set<int> a;
cin >> N;
for(int i=0; i<N; i++){
cin >> x;
a.insert(x);
}
cout << a.size() << endl;
*/
//投票
/*
int N,M;
cin >> N >> M;
int a;
int A[1000];
int B[1000];
int X[1000][2];
for(int i=0; i<N; i++){
cin >> A[i];
X[i][0] = i;
X[i][1] = 0;
}
for(int j=0; j<M;j++){
cin >> B[j];
}
for(int j=0; j<M; j++){
for(int i=0; i<N; i++){
if(A[i] <= B[j]){
X[i][1]++;
break;
}
}
}
for(int i=1; i<N; i++){
if(X[i-1][1]<X[i][1])
X[i-1][0] = X[i][0];
}
cout << X[0][0]+1 << endl;
*/
/*
int N,M;
cin >> N >> M;
int A[1000];
int vote[1000];
for(int i=0; i<N; i++){
cin >> A[i];
vote[i] =0;
}
int B;
for(int i=0; i<M; i++){
cin >> B;
for(int j=0; j<N; j++){
if(A[j]<=B){
vote[j]++;
break;
}
}
}
int temps = 0;
int ans=0;
for(int i=0; i<N; i++){
if(vote[i] >= temps){
temps = vote[i];
ans = i;
}
}
cout << ans+1 << endl;
*/
// return 0;
//}
/*
int max(int i,int j){
if(i < j) i=j;
return i;
}
*/
Compilation message
gap.cpp:1341:2: warning: "/*" within comment [-Wcomment]
/*
gap.cpp:1513:1: warning: "/*" within comment [-Wcomment]
/*
gap.cpp:1516:2: warning: "/*" within comment [-Wcomment]
/*
gap.cpp:2082:2: warning: "/*" within comment [-Wcomment]
/*
gap.cpp:2357:2: warning: "/*" within comment [-Wcomment]
/*
In file included from /usr/include/c++/7/cassert:44:0,
from /usr/include/x86_64-linux-gnu/c++/7/bits/stdc++.h:33,
from gap.cpp:11:
gap.cpp: In function 'long long int findGap(int, int)':
gap.cpp:47:19: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
assert(a.size() == N):
~~~~~~~~~^~~~
gap.cpp:47:24: error: expected ';' before ':' token
assert(a.size() == N):
^