#pragma once
#include<algorithm>
#include<iterator>
#include<vector>usingnamespacestd;template<typenamemint>vector<mint>BerlekampMassey(constvector<mint>&s){constintN=(int)s.size();vector<mint>b,c;b.reserve(N+1);c.reserve(N+1);b.push_back(mint(1));c.push_back(mint(1));minty=mint(1);for(inted=1;ed<=N;ed++){intl=int(c.size()),m=int(b.size());mintx=0;for(inti=0;i<l;i++)x+=c[i]*s[ed-l+i];b.emplace_back(mint(0));m++;if(x==mint(0))continue;mintfreq=x/y;if(l<m){autotmp=c;c.insert(begin(c),m-l,mint(0));for(inti=0;i<m;i++)c[m-1-i]-=freq*b[m-1-i];b=tmp;y=x;}else{for(inti=0;i<m;i++)c[l-1-i]-=freq*b[m-1-i];}}reverse(begin(c),end(c));returnc;}