#pragma once
#include"factor-enumerate.hpp"template<intMAX>vector<int>osak(intn){staticvector<int>f=factor_enumerate(MAX);vector<int>ret;while(f[n])ret.push_back(f[n]),n/=f[n];returnret;}template<intMAX>vector<pair<int,int>>osak_table(intn){staticvector<int>f=factor_enumerate(MAX);vector<pair<int,int>>v;for(;f[n];n/=f[n]){if(v.empty()||v.back().first!=f[n]){v.emplace_back(f[n],1);}else{v.back().second++;}}returnv;}template<intMAX>vector<int>osak_divisors(intn){if(n==0)return{};if(n==1)returnvector<int>(1,1);autop=osak_table<MAX>(n);vector<int>ds;autodfs=[&](autor,inti,intc){if(i==(int)p.size()){ds.push_back(c);return;}for(intj=0;j<=p[i].second;j++){r(r,i+1,c);c*=p[i].first;}};dfs(dfs,0,1);sort(begin(ds),end(ds));returnds;}