with Square;
procedure Magic_Square is
    procedure Do_A_Magic_Square (Size : in Positive) is  
        package This_Square is new Square (Size);
        use This_Square;
        Token : Positive := 1;
    begin
        Go_To_Center;
        Go (North);
        loop
            Deposit (Token);
            exit when Token = Size ** 2;
            Token := Token + 1;
            Go (North_East);  
            while Is_Already_Occupied loop
                Go (North_West);
            end loop;
        end loop;  
        Display;
    end Do_A_Magic_Square;

begin  
    for Size in 3 .. 13 loop
        if Size mod 2 /= 0 then
            Do_A_Magic_Square (Size);
        end if;
    end loop;
end Magic_Square;