#include <iostream>
#include <iomanip>
#include <string>
#include <vector>
#include <algorithm>
#include <map>
#include <cmath>
#include <queue>
#include <set>
#include <cassert>
#include <random>

#define rep(i, n) for (int i = 0; i < (n); i++)

using namespace std;
typedef long long int ll;
const int INF = 1000000000;
const double PI = acos(-1);
const ll mod = 1000000007;

int D;  // 全日数
int c[26];  // 満足度減少係数
int s[365][26];  // 満足度上昇値
int last[26] = {};  // 各コンテストを最後に開催した日
int t[365] = { 0 };  // 各日に開催するコンテスト

// スコア計算関数
int CalcScore() {
    int res = 0;
    int last_[26] = { 0 };
    rep(i, D) {
        res += s[i][t[i] - 1];
        last_[t[i] - 1] = i + 1;
        rep(j, 26) {
            res -= c[j] * (i+1 - last_[j]);
        }
    }
    return res;
}

// d日目のコンテストをqに変更する関数
void ModifyQuery(int d, int q) {
    t[d - 1] = q;
}

// d1日目とd2日目のコンテストを入れ替える関数
void SwapQuery(int d1, int d2) {
    int tmp = t[d1 - 1];
    t[d1 - 1] = t[d2 - 1];
    t[d2 - 1] = tmp;
}

int main()
{
    clock_t start = clock();  // タイマ設定
    cin >> D;
    rep(i, 26) cin >> c[i];
    rep(i, D) rep(j, 26) cin >> s[i][j];

    // 貪欲法
    rep(i, D) {
        int max_v = -INF;
        rep(j, 26) {
            int v = 0;
            v += s[i][j];
            rep(k, 26) {
                if (k == j) continue;
                v -= c[k] * (i + 1 - last[k]);
            }
            if (v > max_v) {
                max_v = v;
                t[i] = j + 1;
            }
        }
        last[t[i] - 1] = i + 1;
    }
    int score = CalcScore();
    
    // 乱数生成
    std::mt19937 mt{ std::random_device{}() };
    std::uniform_int_distribution<int> switch_ran(1, 2);  // for switch modify query and swap query
    std::uniform_int_distribution<int> d_ran(1, D);       // for day (modify query)
    std::uniform_int_distribution<int> q_ran(1, 26);      // for contest (modify query)
    std::uniform_int_distribution<int> d1_ran(1, D - 1);  // for day1 (swap query)
    std::uniform_int_distribution<int> dist_ran(1, 13);   // for dist between day1 and day2 (swap query)
    while(true) {
        clock_t end = clock();  // タイマ取得
        double time = (double)(end - start) / CLOCKS_PER_SEC;  // 経過時間計算
        if (time > 1.95) break;  // 制限時間が近づいていたらbreak

        // クエリ選択
        int sw = switch_ran(mt);
        if (sw == 1) {  // modify query
            int d = d_ran(mt);
            int q = q_ran(mt);
            int old = t[d - 1];
            ModifyQuery(d, q);
            int new_score = CalcScore();
            if (new_score < score) {  // 悪化していたら元に戻す
                t[d - 1] = old;
            }
            else {  // 改善していたら更新
                score = new_score;
            }
        }
        else {  // swap query
            int d1 = d1_ran(mt);
            int dist = dist_ran(mt);
            int d2 = min(D, d1 + dist);
            int old1 = t[d1 - 1];
            int old2 = t[d2 - 1];
            SwapQuery(d1, d2);
            int new_score = CalcScore();
            if (new_score < score) {  // 悪化していたら元に戻す
                t[d1 - 1] = old1;
                t[d2 - 1] = old2;
            }
            else {  // 改善していたら更新
                score = new_score;
            }
        }
    }

    // 結果出力
    rep(i, D) cout << t[i] << endl;
    return 0;
}


Measured memory_bytes: 3720