program Queen {

    var
    {
        Integer n,Count;
        Integer[] data, hor, ver, diagDown, diagUp;
    }

    function ShowResult():void;
    var
    {
        Integer ii, jj;
    }
    {
        for (ii = 0; ii < n;ii = ii + 1) 
        {
            for (jj = 0; jj < n;jj = jj + 1) 
            {
                write("[" + (data[jj * n + ii] == 1 ? "X" : " ") + "]");
            }
            writeLn("");
        }
        writeLn("#" + Count);
        writeLn("");
    }

    function Establish(Integer i):void;
    var
    {
        Integer j;
    }
    {
        for (j = 0; j < n; j = j + 1) 
        {
            if(hor[i] == 0 && ver[j] == 0 && diagDown[i - j + n - 1] == 0 && diagUp[i + j] == 0 && data[j*n+i] == 0) 
            {
                data[j * n + i] = hor[i] = ver[j] = diagUp[i + j] = diagDown[i - j + n - 1] = 1;
                if (i < n - 1) 
                {
                    Establish(i + 1);
                } 
                else 
                {
                    Count = Count + 1;
                    ShowResult();
                }
                if (i < n) 
                {
                    data[j * n + i] = hor[i] = ver[j] = diagUp[i + j] = diagDown[i - j + n - 1] = 0;
                }
            }
        }
    }

    function main():void;
    var
    {
        Integer i,t,j;
    }
    {
        n = 8;
        Count = 0;
		data = new Integer[n * n];
		ver = new Integer[n];
		hor = new Integer[n];
        t = 2 * n - 1;
		diagDown = new Integer[t]; 
		diagUp = new Integer[t];
        Establish(0);
        if (Count == 0) 
        {
            writeLn(" ");
        }
    }
}