#include <stdio.h>
#define N 102
void pp(int a[][N], int n)
{
    for (int i = 1; i <= n; ++i)
    {
        for (int j = 1; j <= n ; ++j)
        {
            if (a[i][j])
                printf("%5d" , a[i][j]);
            else printf("%5s", "");
        }
        putchar('\n');
    }
}
int main()
{
    int n, sideLength;
    int a[N][N];
    printf("n(1~9999) = ");
    scanf("%d", &n);
    for (sideLength = 0; sideLength * sideLength < n; ++sideLength);
    // initialize
    for (int i = 0; i <= sideLength + 1; ++i)
        for (int j = 0; j <= sideLength + 1; ++j)
        {
            a[i][j] = 0;
            if (i == 0 || j == 0 || i == sideLength + 1 || j == sideLength + 1 )
                a[i][j] = -1;
        }
    int x = 1, y = 1, dx = 1, dy = 0;
    for (int i = 1; i <= n; ++i)
    {
        a[y][x] = i;
        if (a[y + dy][x + dx])
        {
            // change direction
            int t = -dy;
            dy = dx;
            dx = t;
        }
        x += dx;
        y += dy;
    }
    pp(a, sideLength);

    return 0;
}
