// Slower C++ solution:
/*#pragma GCC target("avx512f,avx512dq,avx512cd,avx512bw,avx512vl")

#pragma GCC optimize("O3")

#pragma GCC optimize("unroll-loops")*/

//#include<bits/stdc++.h>

#include<iostream>

#include<vector>

using namespace std;

#define ll long long



//色々計算する用

vector<ll>C(26),last2(26),T(365),Tans(365),V(365),Vorigin(365);

vector<vector<ll>>S(365,vector<ll>(26)),

                last(365,vector<ll>(26)),

                last_sim(365,vector<ll>(26));

ll D,vmax,dadd_best,steps=0;



//リセット用の関数S

void R26(vector<ll>&A){

    for(int i=0;i<26;++i)A[i]=0;

}



void R365(vector<ll>&A){

    for(int i=0;i<365;++i)A[i]=0;

}



void R365_26(vector<vector<ll>>&A){

    for(int i=0;i<365;++i)for(int j=0;j<26;++j)A[i][j]=0;

}



void greedy(){

    ll dadd,i,j,k,l,i_calc,tbest,score,vbest;

    for(dadd=0;dadd<=26;++dadd){

        //リセット

        R26(last2);

        R365_26(last);



        for(i=0;i<D;++i){

            i_calc=min(i+dadd+1,D);

            for(j=0;j<26;++j){

                //得点の初期化

                if(i==0){

                    V[i]=0;

                }else{

                    V[i]=V[i-1];

                }

                

                //lastの初期化

                if(i==0)R26(last[i]);

                else last[i]=last[i-1];



                last[i][j]=i+1;

                V[i]+=S[i][j];



                for(k=0;k<26;++k)

                    for(l=i;l<i_calc;l++)V[i]-=C[k]*(l+1-last[i][k]);



                if(j==0||V[i]>=vmax){

                    vmax=V[i];

                    tbest=j;

                }

            }

            if(i==0)R26(last[i]);

            else last[i]=last[i-1];

            T[i]=tbest+1;

            last[i][tbest]=i+1;

        }



        //得点の再計算

        score=0;

        R26(last2);



        for(i=0;i<D;++i){

            score+=S[i][T[i]-1];

            last2[T[i]-1]=i+1;

            for(j=0;j<26;j++)score-=C[j]*(i+1-last2[j]);

        }



        if(dadd==0||(dadd!=0 && score>vbest)){

            dadd_best=dadd;

            vbest=score;

            Tans=T;

            last_sim=last;

        }

    }



    vmax=vbest;

    T=Tans;

    last=last_sim;

}



int main(){

    int i,j;

    cin>>D;

    for(i=0;i<26;++i)cin>>C[i];

    for(i=0;i<D;++i)for(j=0;j<26;++j)cin>>S[i][j];



    //初期解の生成    

    greedy();



    for(i=0;i<D;++i)cout<<T[i]<<"\n";

    return 0;

}

// Faster C++ solution for the same problem (measured speedup: 1.5836190540288253x):
#include<iostream>

#include<vector>

using namespace std;

#define ll long long



//色々計算する用

ll C[26],last2[26],T[365],Tans[365],V[365],Vorigin[365];

ll S[365][26],last[365][26],last_sim[365][26];

ll D,vmax,dadd_best,steps=0;



//リセット用の関数S

void R26(ll A[26]){

    for(int i=0;i<26;++i)A[i]=0;

}



void R365(ll A[365]){

    for(int i=0;i<365;++i)A[i]=0;

}



void R365_26(ll A[365][26]){

    for(int i=0;i<365;++i)for(int j=0;j<26;++j)A[i][j]=0;

}



void copy26(ll A[26],ll B[26]){

    for(int i=0;i<26;++i)A[i]=B[i];

}



void copy365(ll A[365],ll B[365]){

    for(int i=0;i<365;++i)A[i]=B[i];

}



void copy365_26(ll A[365][26],ll B[365][26]){

    for(int i=0;i<365;++i)for(int j=0;j<26;++j)A[i][j]=B[i][j];

}



void greedy(){

    ll dadd,i,j,k,l,i_calc,tbest,score,vbest;

    for(dadd=0;dadd<=26;++dadd){

        //リセット

        R26(last2);

        R365_26(last);



        for(i=0;i<D;++i){

            i_calc=min(i+dadd+1,D);

            for(j=0;j<26;++j){

                //得点の初期化

                if(i==0){

                    V[i]=0;

                }else{

                    V[i]=V[i-1];

                }

                

                //lastの初期化

                if(i==0)R26(last[i]);

                else copy26(last[i],last[i-1]);



                last[i][j]=i+1;

                V[i]+=S[i][j];



                for(k=0;k<26;++k)

                    for(l=i;l<i_calc;l++)V[i]-=C[k]*(l+1-last[i][k]);



                if(j==0||V[i]>=vmax){

                    vmax=V[i];

                    tbest=j;

                }

            }

            if(i==0)R26(last[i]);

            else copy26(last[i],last[i-1]);

            T[i]=tbest+1;

            last[i][tbest]=i+1;

        }



        //得点の再計算

        score=0;

        R26(last2);



        for(i=0;i<D;++i){

            score+=S[i][T[i]-1];

            last2[T[i]-1]=i+1;

            for(j=0;j<26;j++)score-=C[j]*(i+1-last2[j]);

        }



        if(dadd==0||(dadd!=0 && score>vbest)){

            dadd_best=dadd;

            vbest=score;

            copy365(Tans,T);

            copy365_26(last_sim,last);

        }

    }



    vmax=vbest;

    copy365(T,Tans);

    copy365_26(last,last_sim);

}



int main(){

    int i,j;

    cin>>D;

    for(i=0;i<26;++i)scanf("%lld",&C[i]);

    for(i=0;i<D;++i)for(j=0;j<26;++j)scanf("%lld",&S[i][j]);



    //初期解の生成    

    greedy();



    for(i=0;i<D;++i)printf("%lld\n",T[i]);

    return 0;

}