#include<bits/stdc++.h>typedeflonglong ll;#define rg register
template <typename T>inlinevoidread(T&x){char cu=getchar();x=0;bool fla=0;while(!isdigit(cu)){if(cu=='-')fla=1;cu=getchar();}while(isdigit(cu))x=x*10+cu-'0',cu=getchar();if(fla)x=-x;}
template <typename T>inlinevoidprinte(const T x){if(x>=10)printe(x/10);putchar(x%10+'0');}
template <typename T>inlinevoidprint(const T x){if(x<0)putchar('-'),printe(-x);elseprinte(x);}
template <typename T>inline T min(const T a,const T b){return a<b?a:b;}
template <typename T>inline T max(const T a,const T b){return a>b?a:b;}int n,a[300001],ans;intmain(){read(n);for(rg int i=1;i<=n;i++)read(a[i]);for(rg int i=1;i<=n;i++)if(a[i]!=a[1])ans=max(ans,i-1);for(rg int i=1;i<=n;i++)if(a[i]!=a[n])ans=max(ans,n-i);print(ans);return0;}
#include<bits/stdc++.h>typedeflonglong ll;#define rg register
template <typename T>inlinevoidread(T&x){char cu=getchar();x=0;bool fla=0;while(!isdigit(cu)){if(cu=='-')fla=1;cu=getchar();}while(isdigit(cu))x=x*10+cu-'0',cu=getchar();if(fla)x=-x;}
template <typename T>inlinevoidprinte(const T x){if(x>=10)printe(x/10);putchar(x%10+'0');}
template <typename T>inlinevoidprint(const T x){if(x<0)putchar('-'),printe(-x);elseprinte(x);}
template <typename T>inline T min(const T a,const T b){return a<b?a:b;}
template <typename T>inline T max(const T a,const T b){return a>b?a:b;}int n,H,a[300001],b[300001],l,r,ans;
bool check(constint mid){for(rg int i=1;i<=mid;i++)b[i]=a[i];std::sort(b+1,b+mid+1);int cost=0;for(rg int i=mid;i>=0;i-=2){cost+=b[i];if(cost>H)return0;}return1;}intmain(){read(n),read(H),l=1,r=n;for(rg int i=1;i<=n;i++)read(a[i]);while(l<=r){constint mid=(l+r)>>1;if(check(mid))ans=mid,l=mid+1;else r=mid-1;}print(ans);return0;}
#include<bits/stdc++.h>typedeflonglong ll;#define rg register
template <typename T>inlinevoidread(T&x){char cu=getchar();x=0;bool fla=0;while(!isdigit(cu)){if(cu=='-')fla=1;cu=getchar();}while(isdigit(cu))x=x*10+cu-'0',cu=getchar();if(fla)x=-x;}
template <typename T>inlinevoidprinte(const T x){if(x>=10)printe(x/10);putchar(x%10+'0');}
template <typename T>inlinevoidprint(const T x){if(x<0)putchar('-'),printe(-x);elseprinte(x);}
template <typename T>inline T min(const T a,const T b){return a<b?a:b;}
template <typename T>inline T max(const T a,const T b){return a>b?a:b;}int n,m,a[501][501],fla=1;intmain(){read(n),read(m);for(rg int i=1;i<=n;i++)for(rg int j=1;j<=m;j++)read(a[i][j]);for(rg int i=1;i<=n;i++)for(rg int j=1;j<=m;j++){int x;read(x);a[i][j]^=x^a[i-1][j]^a[i][j-1]^a[i-1][j-1];}for(rg int i=1;i<=n;i++)if(a[i][m])fla=0;for(rg int i=1;i<=m;i++)if(a[n][i])fla=0;if(fla)puts("Yes");elseputs("No");return0;}
#include<bits/stdc++.h>typedeflonglong ll;#define rg register
template <typename T>inlinevoidread(T&x){char cu=getchar();x=0;bool fla=0;while(!isdigit(cu)){if(cu=='-')fla=1;cu=getchar();}while(isdigit(cu))x=x*10+cu-'0',cu=getchar();if(fla)x=-x;}
template <typename T>inlinevoidprinte(const T x){if(x>=10)printe(x/10);putchar(x%10+'0');}
template <typename T>inlinevoidprint(const T x){if(x<0)putchar('-'),printe(-x);elseprinte(x);}
template <typename T>inline T min(const T a,const T b){return a<b?a:b;}
template <typename T>inline T max(const T a,const T b){return a>b?a:b;}int n,q;
ll s[100001],c[100002],ans[100001],las=-1,dq=0,before;intmain(){read(n);for(rg int i=1;i<=n;i++)read(s[i]);std::sort(s+1,s+n+1);n=std::unique(s+1,s+n+1)-s-1;ans[1]=n;for(rg int i=2;i<=n;i++)c[i]=s[i]-s[i-1];std::sort(c+1,c+n+1);c[n+1]=2000000000000000000ll;for(rg int i=2;i<=n+1;i++)if(c[i]!=dq){ans[i-1]=ans[i-2]+(dq-las-1)*before+n-i+2;before=n-i+2; las=dq,dq=c[i];}else ans[i-1]=ans[i-2];read(q);for(rg int i=1;i<=q;i++){ll x,y;read(x),read(y),y-=x;x=std::upper_bound(c+1,c+n+1,y)-c-1;print(ans[x]+(y-c[x])*(n-x+1)),putchar(' ');}return0;}
#include<bits/stdc++.h>typedeflonglong ll;#define rg register
template <typename T>inlinevoidread(T&x){char cu=getchar();x=0;bool fla=0;while(!isdigit(cu)){if(cu=='-')fla=1;cu=getchar();}while(isdigit(cu))x=x*10+cu-'0',cu=getchar();if(fla)x=-x;}
template <typename T>inlinevoidprinte(const T x){if(x>=10)printe(x/10);putchar(x%10+'0');}
template <typename T>inlinevoidprint(const T x){if(x<0)putchar('-'),printe(-x);elseprinte(x);}
template <typename T>inline T min(const T a,const T b){return a<b?a:b;}
template <typename T>inline T max(const T a,const T b){return a>b?a:b;}
ll n,a[300001],all,usd,ans;intmain(){read(n);for(rg int i=0;i<n;i++)read(a[i]),all+=a[i];for(rg int i=n-1;i>=0;i--){int A=min(all-usd,a[i]),other=a[i]-A;if((all-usd-A)*2<=A){ll add=all-usd-A;usd+=add,A-=add*2,ans+=add;add=A/3;A-=add*3,ans+=add;usd=max(usd-A,0ll);}else{ll add=A/2;usd+=add,A-=add*2,ans+=add;usd=max(usd-A,0ll);}usd=max(usd-other,0ll),all-=a[i];}print(ans);return0;}
#include<bits/stdc++.h>typedeflonglong ll;#define rg register
template <typename T>inlinevoidread(T&x){char cu=getchar();x=0;bool fla=0;while(!isdigit(cu)){if(cu=='-')fla=1;cu=getchar();}while(isdigit(cu))x=x*10+cu-'0',cu=getchar();if(fla)x=-x;}
template <typename T>inlinevoidprinte(const T x){if(x>=10)printe(x/10);putchar(x%10+'0');}
template <typename T>inlinevoidprint(const T x){if(x<0)putchar('-'),printe(-x);elseprinte(x);}
template <typename T>inline T min(const T a,const T b){return a<b?a:b;}
template <typename T>inline T max(const T a,const T b){return a>b?a:b;}
template <typename T>inline T gcd(const T a,const T b){if(!b)return a;returngcd(b,a%b);}
template <typename T>inlinevoidmaxd(T&a,const T b){a=a>b?a:b;}
template <typename T>inline T abs(const T a){return a>0?a:-a;}constint maxn=250001,maxm=500001;int n,head[maxn],nxt[maxm],tow[maxm],vau[maxm],tmp,d[maxn];inlinevoidaddb(constint u,constint v,constint w){tmp++;nxt[tmp]=head[u];head[u]=tmp;tow[tmp]=v;vau[tmp]=w;}
std::vector<int>T[maxn];int fa[maxn],nex[maxn+1],las;voidffa(constint u){for(rg int i=head[u];i;i=nxt[i]){constint v=tow[i];if(v!=fa[u])fa[v]=u,ffa(v);}}
bool vis[maxn];struct SET
{std::multiset<int,std::greater<int>>main;std::vector<int>erased,added;ll lj;int tot;voidinsert(constint x){main.insert(x),lj+=x,tot++;}voidresize(constint x){while(tot>x){tot--,lj-=*main.begin();main.erase(main.begin());}}voidRESIZE(constint x){while(tot>x){tot--,lj-=*main.begin(),erased.push_back(*main.begin());main.erase(main.begin());}}voidINSERT(constint x){main.insert(x),lj+=x,tot++;added.push_back(x);}voidBACK(){for(std::vector<int>::iterator Pos=erased.begin();Pos!=erased.end();Pos++)main.insert(*Pos),tot++,lj+=*Pos;erased.clear();for(std::vector<int>::iterator Pos=added.begin();Pos!=added.end();Pos++)main.erase(main.find(*Pos)),tot--,lj-=*Pos;added.clear();}}s[maxn];
ll f[maxn][2];int G;voiddfs(constint u){int ned=d[u]-G;s[u].resize(ned);ll tot=0;int*lc=&head[u];for(rg int i=head[u];i;i=nxt[i]){constint v=tow[i];if(vis[v]){(*lc)=nxt[i];continue;}else lc=&nxt[i];if(v!=fa[u]){dfs(v);if(f[v][1]+vau[i]<=f[v][0])ned--,tot+=f[v][1]+vau[i];else{tot+=f[v][0];s[u].INSERT(f[v][1]+vau[i]-f[v][0]);}}}s[u].RESIZE(max(ned,0));f[u][0]=s[u].lj+tot;ned--;s[u].RESIZE(max(ned,0));f[u][1]=s[u].lj+tot;s[u].BACK();}intmain(){read(n);for(rg int i=1;i<n;i++){int u,v,w;read(u),read(v),read(w);addb(u,v,w),addb(v,u,w),d[u]++,d[v]++;}for(rg int i=1;i<=n;i++)T[d[i]].push_back(i);for(rg int i=n;i>=1;i--){nex[i]=las;if(!T[i].empty())las=i;}vis[0]=1;ffa(1);for(rg int i=1;i<=n;i++){G=i-1;ll ans=0;for(rg int p=i;p;p=nex[p]){for(std::vector<int>::iterator Pos=T[p].begin();Pos!=T[p].end();Pos++)if(vis[fa[*Pos]]){dfs(*Pos);ans+=f[*Pos][0];}}print(ans),putchar('\n');for(std::vector<int>::iterator Pos=T[i].begin();Pos!=T[i].end();Pos++){constint u=*Pos;vis[u]=1;for(rg int j=head[u];j;j=nxt[j]){constint v=tow[j];if(!vis[v])s[v].insert(vau[j]);}}}return0;}
#include<bits/stdc++.h>typedeflonglong ll;#define rg register
template <typename T>inlinevoidread(T&x){char cu=getchar();x=0;bool fla=0;while(!isdigit(cu)){if(cu=='-')fla=1;cu=getchar();}while(isdigit(cu))x=x*10+cu-'0',cu=getchar();if(fla)x=-x;}
template <typename T>inlinevoidprinte(const T x){if(x>=10)printe(x/10);putchar(x%10+'0');}
template <typename T>inlinevoidprint(const T x){if(x<0)putchar('-'),printe(-x);elseprinte(x);}
template <typename T>inline T min(const T a,const T b){return a<b?a:b;}
template <typename T>inline T max(const T a,const T b){return a>b?a:b;}
template <typename T>inline T gcd(const T a,const T b){if(!b)return a;returngcd(b,a%b);}
template <typename T>inlinevoidmaxd(T&a,const T b){a=a>b?a:b;}
template <typename T>inline T abs(const T a){return a>0?a:-a;}int n,m,a[1000001],b[1000001],k[1000001],all,pl[1000001];intmain(){read(n),read(m);for(rg int i=1;i<=m;i++)read(a[i]),b[i]=a[i],all+=a[i];for(rg int i=1;i<=m;i++){k[i]=a[i]%n;if(k[i]){int las=n-k[i];for(int j=i+1;j<=m+1;j++)if(a[j]<las&&j!=m+1){k[j]=k[j-1]+a[j];las-=a[j];}else{i=j-1;a[j]-=las;break;}}}std::sort(k+1,k+m);print((all+n-1)/n),putchar('\n');k[m]=n;for(rg int i=1;i<=m;i++)print(k[i]-k[i-1]),putchar(' '),pl[k[i]]=i;putchar('\n');for(rg int i=1;i<=m;i++)a[i]=b[i];for(rg int i=1;i<=m;i++){while(a[i]>=n){a[i]-=n;for(rg int j=1;j<=m;j++)print(i),putchar(' ');putchar('\n');}k[i]=a[i];if(k[i]>0&&i==m){for(rg int j=1;j<=m;j++)print(i),putchar(' ');putchar('\n');}elseif(k[i]>0){int las=n-k[i],zq=0;while(zq<pl[k[i]])zq++,print(i),putchar(' ');for(int j=i+1;j<=m;j++)if(j==m){i=j-1;a[j]-=las;while(zq<m)zq++,print(j),putchar(' ');break;}elseif(a[j]<las){k[j]=k[j-1]+a[j];las-=a[j];while(zq<pl[k[j]])zq++,print(j),putchar(' ');}else{i=j-1;a[j]-=las;while(zq<m)zq++,print(j),putchar(' ');break;}putchar('\n');}}return0;}
#include<bits/stdc++.h>typedeflonglong ll;#define rg register
template <typename T>inlinevoidread(T&x){char cu=getchar();x=0;bool fla=0;while(!isdigit(cu)){if(cu=='-')fla=1;cu=getchar();}while(isdigit(cu))x=x*10+cu-'0',cu=getchar();if(fla)x=-x;}
template <typename T>inlinevoidprinte(const T x){if(x>=10)printe(x/10);putchar(x%10+'0');}
template <typename T>inlinevoidprint(const T x){if(x<0)putchar('-'),printe(-x);elseprinte(x);}
template <typename T>inline T min(const T a,const T b){return a<b?a:b;}
template <typename T>inline T max(const T a,const T b){return a>b?a:b;}constint mod=998244353,inv2=(mod+1)>>1,maxn=131072;intMd(constint x){return x>=mod?x-mod:x;}
ll pow(ll x,ll y){ll res=1;x=(x+mod+mod)%mod;for(;y;y>>=1,x=x*x%mod)if(y&1)res=res*x%mod;return res;}int n,k,lenth;inlinevoidFWT(ll*A){for(rg int i=1;i<lenth;i<<=1)for(rg int j=0;j<lenth;j+=(i<<1))for(rg int k=0;k<i;k++){constint x=A[j+k],y=A[j+k+i];A[j+k]=(x+y),A[j+k+i]=(x-y);}}inlinevoidFWT(ll*A,constint fla){for(rg int i=1;i<lenth;i<<=1)for(rg int j=0;j<lenth;j+=(i<<1))for(rg int k=0;k<i;k++){constint x=A[j+k],y=A[j+k+i];A[j+k]=Md(x+y),A[j+k+i]=Md(x+mod-y);}if(fla==-1){constint inv=pow(inv2,(ll)k);for(rg int i=0;i<lenth;i++)A[i]=(ll)A[i]*inv%mod;}}
ll A[maxn],B[maxn],C[maxn],x,y,z,v;intmain(){read(n),read(k),read(x),read(y),read(z),lenth=1<<k;for(rg int i=1;i<=n;i++){int a,b,c;read(a),read(b),read(c);v^=a,b^=a,c^=a,a=b^c;A[b]++,B[c]++,C[a]++;}FWT(A),FWT(B),FWT(C);for(rg int p=0;p<lenth;p++){const ll a=n,b=A[p],c=B[p],d=C[p];A[p]=pow(x+y+z,(a+b+c+d)/4)*pow(x+y-z,(a+b-c-d)/4)%mod*pow(x-y+z,(a-b+c-d)/4)%mod*pow(x-y-z,(a-b-c+d)/4)%mod;}FWT(A,-1);for(rg int i=0;i<lenth;i++)print(A[i^v]),putchar(' ');return0;}