Task
Produce a graphical or ASCII-art representation of a Sierpinski carpet of order   N.



For example, the Sierpinski carpet of order   3   should look like this:

###########################
# ## ## ## ## ## ## ## ## #
###########################
###   ######   ######   ###
# #   # ## #   # ## #   # #
###   ######   ######   ###
###########################
# ## ## ## ## ## ## ## ## #
###########################
#########         #########
# ## ## #         # ## ## #
#########         #########
###   ###         ###   ###
# #   # #         # #   # #
###   ###         ###   ###
#########         #########
# ## ## #         # ## ## #
#########         #########
###########################
# ## ## ## ## ## ## ## ## #
###########################
###   ######   ######   ###
# #   # ## #   # ## #   # #
###   ######   ######   ###
###########################
# ## ## ## ## ## ## ## ## #
###########################

The use of the   #   character is not rigidly required for ASCII art.

The important requirement is the placement of whitespace and non-whitespace characters.



Related task

   Sierpinski triangle


  [ over 3 mod 1 = ]             is 1?       ( n1 n2 --> n1 n2 f )
 
  [ 3 / swap ]                   is 3/       ( n1 n2 --> n2/3 n1 )
 
  [ true unrot 
    [ 2dup or while 
      1? 1? and iff 
        [ rot not unrot ] done
      3/ 3/ again ] 
  2drop ]                        is incarpet (    n -->          )
 
  [ 1 swap times [ 3 * ] 
    dup times 
      [ i^ over times
          [ i^ over incarpet iff
              [ say "[]" ]
            else 
              [ say "  " ] ]
          drop cr ] 
    drop ]                       is carpet   (    n -->          )
 
4 carpet