#include<iostream>
using namespace std;
int cnt = 0;
int N;
int board[10][10];
int dp[10][10][3];
bool visited[10][10];
int dfs(int x, int y, int time) {
if (dp[x][y][time] != -1) { return dp[x][y][time]; }
int ans = 0, tempans = 0; bool flag =false;
if (!visited[x][y]) { ans = board[x][y]; tempans = board[x][y]; visited[x][y] = true; flag = true; }
if (x == N && y == N && time == 2) { return 0;}
if (x == N && y == N && time == 1) { ans += dfs(1, 1, 2); if (flag) { visited[x][y] = false; }; return ans;}
if (x == N) { ans += dfs(x, y + 1, time); if (flag) { visited[x][y] = false; }; return ans; }
if (y == N) { ans += dfs(x + 1, y, time); if (flag) { visited[x][y] = false; }; return ans; }
else {
ans += dfs(x + 1, y, time); tempans += dfs(x, y + 1, time);
ans = max(ans, tempans);
dp[x][y][time] = ans;
}
if (flag) { visited[x][y] = false;};
return ans;
}
int main() {
int num,x,y;
cin >> N;
for (int i = 1; i <= 9; i++) {
for (int j = 1; j <= 9; j++) {
board[i][j] = 0;
dp[i][j][1] = -1; dp[i][j][2] = -1;
}
}
while (cin >> x >> y >> num) { if (x == 0 && y == 0 && num == 0) { break; }board[x][y] = num; }
int result=dfs(1, 1, 1);
cout << result << endl;
for (int i = 1; i <= N; i++) {
for (int j = 1; j <= N; j++) {
cout << dp[i][j][1] << " ";
}cout << endl;
}cout << endl;
for (int i = 1; i <= N; i++) {
for (int j = 1; j <= N; j++) {
cout << dp[i][j][2] << " ";
}cout << endl;
}cout << endl;
return 0;
}