#include <bits/stdc++.h>
using namespace std;
using ll = long long;
#define int ll

typedef vector<int> vi;
typedef vector<bool> vb;
typedef pair<int,int> pii;
typedef vector<pair<int,int> > vpii;
typedef vector<vector<bool> > vvb;
typedef vector<vector<int> > vvi;
typedef map<int, bool> mib;

typedef long long ll;
typedef vector<long long> vl;
typedef pair<long long,long long> pll;
typedef vector<pair<long long,long long> > vpll;

typedef vector<string> vs;

typedef long double ld;

#define _GLIBCXX_DEBUG

#define REP(i,n) for (int i = 0; i < (n); ++i)
#define REPD(i,n) for (int i = (n-1); i >= 0; --i)
#define FORE(i, s, n) for (int i = (s); i <= (int)(n); i++)
#define FORED(i, s, n) for (int i = (s); i >= (int)(n); i--)
#define debug(x) cerr << #x << ": " << x << '\n'
#define debug2(x, y) cerr << #x << ": " << x << ", " << #y << ": " << y << '\n'
#define debug3(x, y, z) cerr << #x << ": " << x << ", " << #y << ": " << y << ", " << #z << ": " << z << '\n'
#define debugs(s) cerr << s << "\n"
#define hyphen() cerr << "--\n"

#define ALL(vec) (vec).begin(), (vec).end()
#define REVALL(vec) (vec).rbegin(), (vec).rend()

static const int dy[4] = {0,1,0,-1}, dx[4] = {1,0,-1,0};

#define fst first
#define snd second
#define pb push_back
#define mk(x,y) make_pair((x),(y))

// http://ehafib.hatenablog.com/entry/2015/12/23/164137
int qp(int a,ll b){int ans=1;do{if(b&1)ans=1ll*ans*a;a=1ll*a*a;}while(b>>=1);return ans;}
int qpm(int a,ll b,int mo){int ans=1;do{if(b&1)ans=1ll*ans*a%mo;a=1ll*a*a%mo;}while(b>>=1);return ans;}
// gcd : O(logN)
int gcd(int a,int b){return b?gcd(b,a%b):a;}
int lcm(int a, int b) { return a / gcd(a, b) * b; }

#define sz(v) int(v.size())

// x1, x2ライブラリとの被りを避ける
#define x1 x192837465
#define x2 x123456789
#define y1 y192837465
#define y2 y123456789

// typo
#define itn int
#define reutrn return
#define reutnr return
#define srting string

#define make(type, x) type x; cin>>x;
#define make2(type, x, y) type x, y; cin>>x>>y;
#define make3(type, x, y, z) type x, y, z; cin>>x>>y>>z;
#define make4(type, x, y, z, t) type x, y, z, t; cin>>x>>y>>z>>t;

int ctoi(const char c){
    if('0' <= c && c <= '9') return (c-'0');
    return -1;
}

#define uniq(v) (v).erase(unique(ALL((v))), (v).end());

// area of (0, 0)(a, b)(c, d)
double area(double a, double b, double c, double d){
    return abs(a * d - b * c) / 2.0;
}

const int PREC = 10;
#define coutf(val) cout << fixed << setprecision(PREC) << (val) << endl;

const int MOD = (int)1e9 + 7;
const int INF = numeric_limits<int>::max();

const int N = 26;

int decide_greedy(const vi Cs, const vvi Ss, const vvi Last, int d) {
    int max_p = -1;
    int t = 0;
    REP(cand, N){
        // Lastの計算は前日(d-1)のものを使うことに注意
        int last = d - 1 >= 0 ? Last.at(d-1).at(cand) : 0;
        int s = Ss.at(d).at(cand) + Cs.at(cand) * (d + 1 - last);
        if (s > max_p) {
            max_p = s;
            t = cand;
        }
    }

    return t;
}

signed main() {
    make(int, D);

    vi Cs(N);
    REP(n, N) {
        make(int, C);
        Cs.at(n) = C;
    }

    vvi Ss(D, vi(N, 0));
    REP(d, D) {
        REP(n, N) {
            make(int, s);
            Ss.at(d).at(n) = s;
        }
    }

    // d日目終了時に、そのコンテストが最後に行われた日にち
    vvi Last(D, vi(N, 0));

    // 何日にどのコンテストを開くか。
    // 途中で変化させるので、配列で持っておいて最後に出力
    vi Ans(D);

    // d日目終了時の満足度
    vi Sat(D, 0);

    // とりあえず貪欲法でベースとなる解を作ろう
    // 満足度
    int satisfaction = 0;
    REP(d, D) {
        int t = decide_greedy(Cs, Ss, Last, d);
        Ans.at(d) = t;

        // やったコンテストに応じて満足度上昇
        satisfaction += Ss.at(d).at(t);

        // 最後にコンテストをやった日にちを更新
        REP(n, N) {
            if (n == t) {
                Last.at(d).at(n) = d + 1;
            } else {
                if (d - 1 >= 0) {
                    Last.at(d).at(n) = Last.at(d-1).at(n);
                }
            }
        }

        // 満足度低下
        REP(n, N) {
            satisfaction -= Cs.at(n) * (d + 1 - Last.at(d).at(n));
        }

        Sat.at(d) = satisfaction;
        debug(satisfaction);
    }


    // 局所探索をする
    // 狙い目は、「いちばん増加率が低かった日」
    // 決定した後の日付について、再度貪欲で決定 (できるかな?)

    // (d日目終了時、前日との差, その日付)
    vpii Diffs(D);
    Diffs.at(0) = mk(Sat.at(0), 0);
    FORE(d, 1, D-1) {
        int diff = Sat.at(d) - Sat.at(d-1);
        Diffs.at(d) = mk(diff, d);
    }

    sort(ALL(Diffs));
    pii p = Diffs.at(0);
    int min_diff = p.fst;
    int min_d = p.snd;

    debug2(min_d, min_diff);

    // min_dの選択を変えるよ。
    // 日付dのコンテストをtからqに変える時に、スコアの差分は?
    // Ss.at(d).at(t) 減る
    // Ss.at(d).at(q) 増える
    // Cs.at(t) * (d + 1 - Last.at(d-1).at(t)) 減る;
    // Cs.at(q) * (d + 1 - Last.at(d-1).at(q)) 増える;

    // tについて、次にtをするまで、Cs.at(t) * (d + 1 - Last.at(d-1).at(t))ずつ減る
    // qについて、次にqをするまで、Cs.at(q) * (d + 1 - Last.at(d-1).at(q)) 増える;

    int t = Ans.at(min_d);
    vpii DIFFS(N, mk(0,0));
    REP(q, N) {
        if (q == t) {
            continue;
        }

        int diff  = - Ss.at(min_d).at(t) - Cs.at(t) * (min_d + 1 - Last.at(min_d-1).at(t));
            diff += + Ss.at(min_d).at(q) + Cs.at(q) * (min_d + 1 - Last.at(min_d-1).at(q));

            FORE(tmp_d, min_d+1, D-1) {
                if (Ans.at(tmp_d) == t) {
                    break;
                }

                int last = min_d - 1 >= 0 ? Last.at(min_d-1).at(t) : 0;
                diff -= Cs.at(t) * (min_d + 1 - last);
            }

            FORE(tmp_d, min_d+1, D-1) {
                if (Ans.at(tmp_d) == q) {
                    break;
                }

                int last = min_d-1 >= 0 ? Last.at(min_d-1).at(q) : 0;
                diff += Cs.at(q) * (min_d + 1 - last);
            }

            DIFFS.at(q) = mk(diff, q);
    }

    sort(ALL(DIFFS));
    pii best_p = DIFFS.at(0);
    int best_diff = best_p.fst;
    int best_q = best_p.snd;

    // min_dのコンテストを差し替える
    Ans.at(min_d) = best_q;

    // 最終結果を出力
    REP(d, D) {
        int t = Ans.at(d);
        cout << (t+1) << endl;
    }
}



Measured memory_bytes: 4004