def main(number, clockwise):
    numberSquared = number * number
    arrayOfNumbers = [[0 for x in range(number)] for y in range(number)]
    
    charactersPerNumber = 2
    
    n = numberSquared
    while(n / 10 >= 1):
        charactersPerNumber += 1
        n = int(n/10)
    
    x = 0
    y = 0
    
    stepValue = 1
    
    upperBound = number - 1
    lowerBound = 0
    
    forward = True
    
    for i in range(1,numberSquared + 1):
        if (clockwise):
            arrayOfNumbers[y][x] = resize(i, charactersPerNumber)
        else:
            arrayOfNumbers[x][y] = resize(i, charactersPerNumber)
        #print(str(x) + ", " + str(y))
        
        if ((x < upperBound and forward) or (x > lowerBound and not forward)):
            x += stepValue
            continue
        
        if ((y < upperBound and forward) or (y > (lowerBound + 1) and not forward)):
            y += stepValue
            continue
        
        if (forward):
            upperBound -= 1
        else:
            lowerBound += 1
        
        forward = not forward
        stepValue = -stepValue
        
        x += stepValue
    
    for x in range(0,number):
        str = ""
        for y in range(0,number):
            str += arrayOfNumbers[x][y]
        
        print(str)
    
    
def resize(number, characters):
    lengthOfNumber = len(str(number))
    numString = str(number)
    
    while(lengthOfNumber < characters):
        # numString += " "
        numString = " " + numString
        lengthOfNumber += 1
    
    return numString
                
if __name__ == "__main__":
    main(5, True)
    print('\n\n')
    main(4, False)