#include using namespace std; #define ALL(x) begin(x),end(x) #define rep(i,n) for(int i=0;i<(n);i++) #define debug(v) cout<<#v<<":";for(auto x:v){cout<bool chmax(T &a,const T &b){if(abool chmin(T &a,const T &b){if(b ostream &operator<<(ostream &os,const vector&v){ for(int i=0;i<(int)v.size();i++) os< istream &operator>>(istream &is,vector&v){ for(T &x:v)is>>x; return is; } template struct Treap{ private: inline int xorshift() const { static int x=122312555; static int y=336261662; static int z=558127122; static int w=917277772; int t; t=x^(x<<11); x=y;y=z;z=w; return w=(w^(w>>19))^(t^(t>>8)); } struct Node; using Ptr=unique_ptr; struct Node{ Ptr l,r; int sz,pri;// priority T val; bool rev; Node()=default; Node(const T &val,int pri): l(nullptr),r(nullptr),sz(1),pri(pri),val(val),rev(false){} }; Ptr root; explicit Treap(Ptr root):root(move(root)){} int size(Ptr &t)const{return (t?t->sz:0);} Ptr merge(Ptr l,Ptr r){ if(!l) return move(r); if(!r) return move(l); push(l);push(r); if(l->pri>r->pri){ l->r=merge(move(l->r),move(r)); l->sz=size(l->l)+1+size(l->r); return move(l); }else{ r->l=merge(move(l),move(r->l)); r->sz=size(r->l)+1+size(r->r); return move(r); } } pair split(Ptr t,int k){ if(!t) return {nullptr,nullptr}; push(t); if(k<=size(t->l)){ auto x=split(move(t->l),k); t->l=move(x.second); t->sz=size(t->l)+1+size(t->r); return {move(x.first),move(t)}; }else{ auto x=split(move(t->r),k-size(t->l)-1); t->r=move(x.first); t->sz=size(t->l)+1+size(t->r); return {move(t),move(x.second)}; } } T &access(Ptr &cur,int k){ assert(cur); push(cur); if(k==size(cur->l)) return cur->val; if(kl)) return access(cur->l,k); else return access(cur->r,k-1-size(cur->l)); } void push(Ptr &t){ if(t->rev){ swap(t->l,t->r); if(t->l) t->l->rev^=true; if(t->r) t->r->rev^=true; t->rev=false; } } public: Treap():root(nullptr){} void insert(int k,const T &x){ auto s=split(move(root),k); Ptr i(new Node(x,xorshift())); root=merge(merge(move(s.first),move(i)),move(s.second)); } void erase(int k){ auto l=split(move(root),k); auto r=split(move(l.second),1); root=merge(move(l.first),move(r.second)); } T &operator[](int k){ return access(root,k); } int size(){ return size(root); } void push_back(T x){ Ptr b(new Node(x,xorshift())); root=merge(move(root),move(b)); } void push_front(T x){ Ptr f(new Node(x,xorshift())); root=merge(move(f),move(root)); } void pop_back(){ root=split(move(root),1).second; } void pop_front(){ root=split(move(root),size()-1).second; } void reverse(int l,int r){ auto x=split(move(root),l); auto y=split(move(x.second),r-l); y.first->rev^=true; root=merge(merge(move(x.first),move(y.first)),move(y.second)); } void rotate(int l,int m,int r){ reverse(l,r); reverse(l,l+r-m); reverse(l+r-m,r); } // [0, k) and [k, size) // cant use this after split pair,Treap> split(int k){ auto x=split(move(root),k); return {Treap(move(x.first)),Treap(move(x.second))}; } // usage : auto new=l.merge(l, r); // cant use l and r after merge Treap merge(Treap &l,Treap &r){ return Treap(merge(move(l.root),move(r.root))); } }; template long long InversionNumber(vector v){ vector ord=v; sort(begin(ord),end(ord)); ord.erase(unique(begin(ord),end(ord)),end(ord)); vector bit(ord.size()+1,0); long long ret=0; for(int i=0;i<(int)v.size();i++){ int p=lower_bound(begin(ord),end(ord),v[i])-begin(ord)+1; for(int j=p;j;j-=(j&-j)) ret-=bit[j]; for(int j=p;j<=(int)ord.size();j+=(j&-j)) bit[j]+=1; ret+=i; } return ret; } signed main(){ ll N,M,K;cin>>N>>M>>K; ll memk=K; Treap V; V.insert(0,0); for(ll i=1;i=p){ K-=p; V.insert(0,i); }else{ ll sz=i; V.insert(sz-K,i); K=0; } } // { // vector w(N); // rep(i,N) w[i]=V[i]; // assert(memk==InversionNumber(w)); // } ll S=0; rep(i,N) S+=V[i]; rep(i,N){ if(V[i]==N-1) V[i]+=M-S; } rep(i,N) cout<