#include <cstdio>
#include <cstring>
#include <iostream>
#include <string>
#include <cmath>
#include <bitset>
#include <vector>
#include <map>
#include <set>
#include <queue>
#include <deque>
#include <algorithm>
#include <complex>
#include <unordered_map>
#include <unordered_set>
#include <random>
#include <cassert>
#include <fstream>
#include <utility>
#include <functional>
#include <time.h>
#include <stack>
#include <array>
#include <list>
#define popcount __builtin_popcount
using namespace std;
typedef long long int ll;
typedef pair<int, int> P;
int d;
int c[27];
int s[366][27];
int calc(vector<int> t){
    int last[26]={};
    vector<int> ret(d);
    int ans=0;
    for(int i=0; i<d; i++){
        ans+=s[i][t[i]];
        last[t[i]]=i+1;
        for(int j=0; j<26; j++){
            ans-=c[j]*(i+1-last[j]);
        }
        ret[i]=ans;
    }
    return ans;
}
mt19937 mt(334);

int main()
{
    cin>>d;
    for(int i=0; i<26; i++) cin>>c[i];
    for(int i=0; i<d; i++) for(int j=0; j<26; j++) cin>>s[i][j];
    vector<int> t(d);
    
    int last[26]={};
    for(int i=0; i<d; i++){
        int kmx=0, mx=-1e9;
        for(int k=0; k<26; k++){
            int sum=s[i][k];
            int myon=last[k];
            last[k]=i+1;
            for(int j=0; j<26; j++){
                sum-=c[j]*(i+1-last[j]);
            }
            last[k]=myon;
            if(mx<sum) kmx=k, mx=sum;
        }
        t[i]=kmx;
        last[kmx]=i+1;
    }

    set<int> st[26];
    for(int i=0; i<d; i++) st[t[i]].insert(i);

    uniform_int_distribution<> rndk(0, d-1), rndq(0, 25), rndk2(0, d-2);
    uniform_real_distribution<> rndp(0.0, 1.0);
    clock_t start = clock();
    int ans=calc(t);
    const double start_temp=10000, end_temp=500;
    const double start_temp2=10000, end_temp2=500;
    const double tl=1.95;
    int loop=0;
    while(1){
        loop++;
        if(loop&1){
            int k;
            k=rndk2(mt);
            if(t[k]==t[k+1]) continue;
            int pr=t[k], q=t[k+1], ansp=ans;
            ans-=s[k][pr];
            ans+=s[k][q];
            ans-=s[k+1][q];
            ans+=s[k+1][pr];
            int l1=-1, l2=-1, r1=d, r2=d;
            auto itr1=st[pr].find(k);
            if(itr1!=st[pr].begin()){
                itr1--;
                l1=*itr1;
                itr1++;
            }
            itr1=st[pr].erase(itr1);
            if(itr1!=st[pr].end()){
                r1=*itr1;
            }
            auto itr2=st[q].find(k+1);
            if(itr2!=st[q].begin()){
                itr2--;
                l2=*itr2;
                itr2++;
            }
            itr2=st[q].erase(itr2);
            if(itr2!=st[q].end()){
                r2=*itr2;
            }
            ans+=c[q]*(k-l2)*(r2-k);
            ans-=c[q]*(k+1-l2)*(r2-k-1);
            ans+=c[pr]*(k+1-l1)*(r1-k-1);
            ans-=c[pr]*(k-l1)*(r1-k);
            auto now=clock();
            double temp=start_temp+(end_temp-start_temp)*(double)(now-start)/CLOCKS_PER_SEC/tl;
            double prob=exp((ans-ansp)/temp);
            if(prob<rndp(mt)){
                st[pr].insert(k);
                st[q].insert(k+1);
                ans=ansp;
            }else{
                swap(t[k], t[k+1]);
                st[q].insert(k);
                st[pr].insert(k+1);
            }
            if((double)(now-start)/CLOCKS_PER_SEC>tl) break;
            continue;
        }
        int k, q;
        k=rndk(mt), q=rndq(mt);
        if(t[k]==q){
            continue;
        }
        int pr=t[k], ansp=ans;
        ans-=s[k][pr];
        ans+=s[k][q];
        int l1=-1, l2=-1, r1=d, r2=d;
        auto itr1=st[pr].find(k);
        if(itr1!=st[pr].begin()){
            itr1--;
            l1=*itr1;
            itr1++;
        }
        itr1=st[pr].erase(itr1);
        if(itr1!=st[pr].end()){
            r1=*itr1;
        }
        auto itr2=st[q].insert(k).first;
        if(itr2!=st[q].begin()){
            itr2--;
            l2=*itr2;
            itr2++;
        }
        itr2++;
        if(itr2!=st[q].end()){
            r2=*itr2;
        }
        ans+=c[q]*(k-l2)*(r2-k);
        ans-=c[pr]*(k-l1)*(r1-k);
        t[k]=q;
        auto now=clock();
        double temp=start_temp+(end_temp-start_temp)*(double)(now-start)/CLOCKS_PER_SEC/tl;
        double prob=exp((ans-ansp)/temp);
        if(prob<rndp(mt)){
            st[pr].insert(k);
            st[q].erase(k);
            t[k]=pr;
            ans=ansp;
        }
        if((double)(now-start)/CLOCKS_PER_SEC>tl) break;
    }
    for(int i=0; i<d; i++){
        cout<<t[i]+1<<endl;
    }
	return 0;
}


Measured memory_bytes: 4276