168 {
169 int n;
171 auto *g =
new int *[
N];
172 for(
int i = 0; i <
N; i++) {
174 for(
int j = 0; j <
N; j++) {
175 g[i][j] = 0;
176 }
177 }
178 cin >> n;
179 for(int i = 1; i <= n; i++) {
180 g[1][i] = i - 1;
181 g[i][1] = i - 1;
182 }
183 for(int i = 2; i < n; i++) {
184 for(int j = 2; j < n; j++) {
185 if(i == j) {
186 g[i][j] = 0;
187 } else {
188 if(g[i][j - 1] == 0) {
189
190 g[i][j] = g[i - 1][j] + 1;
191 } else {
192
193 g[i][j] = g[i][j - 1] + 1;
194 }
195 if(g[i][j] == n) {
196
197 g[i][j] = 1;
198 }
199 }
200 }
201 }
202 for(int i = 1; i < n; i++) {
203 set<int> s;
204 for(int j = 1; j < n; j++) {
205 s.insert(g[i][j]);
206 }
207 for(int j = 0; j < n; j++) {
208 if(!s.contains(j)) {
209 g[i][n] = g[n][i] = j;
210 }
211 }
212 }
213
214
215 for(int i = 1; i <= n; i++) {
216 for(int j = 1; j <= n; j++) {
217 cout << g[i][j];
218 if(j != n) {
219 cout << " ";
220 }
221 }
222 if(i != n) {
223 cout << endl;
224 }
225 }
226 for(
int i = 0; i <
N; i++) {
227 delete[] g[i];
228 }
229 delete[] g;
230 return 0;
231 }