#pragma once
// T[x]/(x^s-r)template<classT,ints,autor>structRootExtension{usingF=RootExtension;array<T,s>a;RootExtension(){a.fill(T{});}RootExtension(constT&x){a.fill(T{});a[0]=x;}T&operator[](intk){returna[k];}F&operator+=(constF&o){for(inti=0;i<s;i++)a[i]+=o.a[i];return*this;}F&operator-=(constF&o){for(inti=0;i<s;i++)a[i]-=o.a[i];return*this;}F&operator*=(constF&o){constT_r=T{r};array<T,s>b{};for(inti=0;i<s;i++){for(intj=0;j<s-i;j++)b[i+j]+=a[i]*o.a[j];for(intj=s-i;j<s;j++)b[i+j-s]+=_r*a[i]*o.a[j];}swap(a,b);return*this;}Foperator+(constF&o)const{returnF(*this)+=o;}Foperator-(constF&o)const{returnF(*this)-=o;}Foperator*(constF&o)const{returnF(*this)*=o;}Foperator-()const{Fret(*this);for(auto&v:ret.a)v=-v;returnret;}Fpow(longlongn)const{Fret=T{1},x=*this;while(n){if(n&1)ret*=x;x*=x;n>>=1;}returnret;}Ttest()const{returnT{r};}};