#include using namespace std; using ll = long long; const ll MOD = 998244353; ll pw(ll b, ll e){ ll r=1; b%=MOD; while(e){ if(e&1) r=r*b%MOD; b=b*b%MOD; e>>=1;} return r; } void ntt(vector&a, bool inv){ int n=a.size(); for(int i=1,j=0;i>1; for(;j&bit;bit>>=1) j^=bit; j^=bit; if(i mul(const vector&a, const vector&b){ if(a.empty()||b.empty()) return {}; int rs=a.size()+b.size()-1; if((ll)a.size()*b.size()<=1024){ vector c(rs,0); for(size_t i=0;i fa(a.begin(),a.end()), fb(b.begin(),b.end()); fa.resize(n); fb.resize(n); ntt(fa,false); ntt(fb,false); for(int i=0;i prodAll(vector>&ps,int l,int r){ if(r-l==1) return ps[l]; int m=(l+r)/2; return mul(prodAll(ps,l,m),prodAll(ps,m,r)); } int main(){ int N; string s; cin>>N>>s; vector c; int cur=1; for(char ch: s){ if(ch=='>') cur++; else { c.push_back(cur); cur=1; } } c.push_back(cur); int k=c.size(); if(k==1){ cout<<0<<"\n"; return 0; } // 単調減少 → LIS=1 vector> ps; for(int r=1;r f(hi+1,1); f[0]=0; ps.push_back(move(f)); } vector g = prodAll(ps,0,ps.size()); vector fact(N+1), inv(N+1); fact[0]=1; for(int i=1;i<=N;i++) fact[i]=fact[i-1]*i%MOD; inv[N]=pw(fact[N],MOD-2); for(int i=N;i>0;i--) inv[i-1]=inv[i]*i%MOD; auto C=[&](int n,int r)->ll{ if(r<0||r>n) return 0; return fact[n]*inv[r]%MOD*inv[n-r]%MOD; }; ll ans=0; for(size_t m=0;m