模板
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <string>
#include <cstring>
#include <cstdlib>
#include <map>
#include <vector>
#include <set>
#include <queue>
#include <stack>
#include <cmath>
typedef long long lli;
#define pql priority_queue<ll>
#define pq priority_queue<int>
#define v vector<int>
#define vl vector<ll>
//线段树
#define lson rt<<1, l, m
#define rson rt<<1|1, m+1, r
#define gcd __gcd
#define mem(s,t) memset(s,t,sizeof(s))
#define debug(a,n) for(int i=0;i<n;i++) cout<<" "<<a[i];
#define Debug(a,n,m) for(int i=0;i<n;i++) {for(int j=0;j<m;j++) cout<<a[i][j]<<" "; cout<<endl; }
#define rep(j,k) for (int i = j; i <= k; i++)
#define per(i,k) for (int i = i; i >= k; i--)
#define input(a,k) for (int i = 1; i <= (int)(k); i++) {scanf("%d",&a[i]) ; }
#define INPUT(a,n,m) for(int i=0;i<n;i++) {for(int j=0;j<m;j++) cin>>a[i][j] ; }
#define TLE std::ios::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL);
#define ok return 0;
#define oi(x) cout<<x<<endl;
#define os(str) cout<<string(str)<<endl;
#define YES cout<<"YES"<<endl;
#define NO cout<<"NO"<<endl;
using namespace std;
const int mxn = 2e5+5;
template<typename T1, typename T2>
std::vector<T1>& operator+=(std::vector<T1> &a, const std::vector<T2> &b) {
assert(a.size() == b.size());
for (size_t i = 0; i < a.size(); ++i) {
a[i] += b[i];
}
return a;
}
template<typename T1, typename T2>
std::vector<T1>& operator-=(std::vector<T1> &a, const std::vector<T2> &b) {
assert(a.size() == b.size());
for (size_t i = 0; i < a.size(); ++i) {
a[i] -= b[i];
}
return a;
}
template<typename T1, typename T2>
std::vector<T1>& operator*=(std::vector<T1> &a, const std::vector<T2> &b) {
assert(a.size() == b.size());
for (size_t i = 0; i < a.size(); ++i) {
a[i] *= b[i];
}
return a;
}
template<typename T1, typename T2>
std::vector<T1>& operator/=(std::vector<T1> &a, const std::vector<T2> &b) {
assert(a.size() == b.size());
for (size_t i = 0; i < a.size(); ++i) {
a[i] /= b[i];
}
return a;
}
template<typename T>
std::vector<T> operator+(const std::vector<T> &a, const std::vector<T> &b) {
std::vector<T> ans(a);
ans += b;
return ans;
}
template<typename T>
std::vector<T> operator-(const std::vector<T> &a, const std::vector<T> &b) {
std::vector<T> ans(a);
ans -= b;
return ans;
}
template<typename T>
std::vector<T> operator*(const std::vector<T> &a, const std::vector<T> &b) {
std::vector<T> ans(a);
ans *= b;
return ans;
}
template <typename T>
std::vector<T> operator/(const std::vector<T> &a, const std::vector<T> &b) {
std::vector<T> ans(a);
ans /= b;
return ans;
}
#define LOCAL
int main()
{
#ifdef LOCAL
freopen("IN.txt","r",stdin);
freopen("OUT.txt","w",stdout);
#endif
}
//快速GCD
ll kgcd(ll a, ll b)
{
if (a == 0) return b;
if (b == 0) return a;
if (!(a & 1) && !(b & 1))
return kgcd(a>>1, b>>1)<<1;
else if (!(b & 1))
return kgcd(a, b>>1);
else if (!(a & 1)) return kgcd(a>>1, b);
else return kgcd(abs(a - b), min(a, b));
}
ll FibonacciN(ll n) { return (1/sqrt(5))*( pow( (1+sqrt(5))/2,n )-pow( (1-sqrt(5))/2 ,n) ); }
ll FibonacciSum(ll n) { return 2*FibonacciN(n)+FibonacciN(n-1)-1; }
所遇皆星河