//#define _GLIBCXX_DEBUG #include using namespace std; #define rep(i, n) for (int i = 0; i < (ll)(n); i++) #define all(a) (a).begin(), (a).end() using ll = long long; const int INF32 = 2e9; const ll INF64 = 4e18; const int mod = 100000000; const double fase1_LIMIT = 0.3, LIMIT = 1.85; int idx_L = 0, idx_R = 0; int calc_score(vector> a,vector ans){ int N = a.size(); vector> ans_pyramid(N); rep(i,N)ans_pyramid[i].assign(i+1,0); rep(i,N)ans_pyramid[N-1][i]=ans[i]; for(int i = N-1; i > 0; i--){ for(int j = 0; j < i; j++){ ans_pyramid[i-1][j]=(ans_pyramid[i][j]+ans_pyramid[i][j+1])%mod; } } int X = 0; for(int i = 0; i < N; i++){ for(int j = 0; j < i; j++){ int gosa = min(abs(a[i][j]-ans_pyramid[i][j]),mod-abs(a[i][j]-ans_pyramid[i][j])); if(gosa>X){ X = gosa; } } } return mod/2-X; } int main() { srand((unsigned int)time(NULL)); auto startTime = chrono::high_resolution_clock::now(); int N; cin >> N; vector> a(N); rep(i,N)a[i].assign(i+1,0); rep(i,N){ rep(j,i+1){ cin >> a[i][j]; } } vector ans(N), bestans(N); int bestscore = 0; double elapsed = 0; while(elapsedbestscore){ bestans = ans; bestscore = score; } auto currentTime = chrono::high_resolution_clock::now(); elapsed = chrono::duration_cast(currentTime - startTime).count() / 1000.0; } while(elapsed=mod)ans[radidx]-=mod; int score = calc_score(a,ans); if(score>bestscore){ bestans = ans; bestscore = score; } auto currentTime = chrono::high_resolution_clock::now(); elapsed = chrono::duration_cast(currentTime - startTime).count() / 1000.0; } rep(i,N){ cout << bestans[i]; if(i==N-1)cout << endl; else cout << " "; } cout << bestscore << endl; return 0; }