using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace test
{
    internal class Program
    {
        static void Main(string[] args)
        {
            string a = Console.ReadLine();
            string[] a1 = a.Split();
            int n = int.Parse(a1[0]);
            int m = int.Parse(a1[1]);
            char[,] mat = new char[n,m];
            for(int i = 0; i < n; i++)
            {
                string inp = Console.ReadLine();
                int ind = 0;
                foreach(char x in inp)
                {
                    mat[i, ind] = x;
                    ind++;
                }
            }
            while (Contains(mat)) { Update(mat); }
            int output = 0;
            for (int i = 0; i < n; i++)
            {
                for (int j = 0; j < m; j++)
                {
                    if (mat[i,j] == 'S') { output++; }
                }
            }
            Console.WriteLine(output);
            for (int i = 0; i < n; i++)
            {
                for(int j = 0; j < m; j++)
                {
                    Console.Write(mat[i, j]);
                }
                Console.Write("\n");
            }
            bool Contains(char[,] mat)
            {
                for (int i = 0; i < mat.GetLength(0); i++)
                {
                    for (int j = 0; j < mat.GetLength(1); j++)
                    {
                        if (mat[i, j] == '.') { return true; }
                    }
                }
                return false;
            }
            char[,] Update(char[,] mat)
            {
                for(int i = 0; i < mat.GetLength(0); i++)
                {
                    for(int j = 0; j < mat.GetLength(1); j++)
                    {
                        if (mat[i,j] == 'X')
                        {
                            if (i > 0) 
                            { 
                                if (mat[i-1,j] == '.') { mat[i - 1, j] = 'x'; } 
                            }
                            if(i < mat.GetLength(0) - 1)
                            {
                                if (mat[i+1,j] == '.') { mat[i + 1, j] = 'x'; }
                            }
                            if (j > 0)
                            {
                                if (mat[i, j-1] == '.') { mat[i, j-1] = 'x'; }
                            }
                            if (j < mat.GetLength(1) - 1)
                            {
                                if (mat[i, j+1] == '.') { mat[i, j+1] = 'x'; }
                            }
                        }
                    }
                }
                for (int i = 0; i < mat.GetLength(0); i++)
                {
                    for (int j = 0; j < mat.GetLength(1); j++)
                    {
                        if (mat[i, j] == 'x') { mat[i, j] = 'X'; }
                    }
                }
                for (int i = 0; i < mat.GetLength(0); i++)
                {
                    for (int j = 0; j < mat.GetLength(1); j++)
                    {
                        if (mat[i, j] == 'S')
                        {
                            if (i > 0)
                            {
                                if (mat[i - 1, j] == '.' && mat[i-1,j] != 'X') { mat[i - 1, j] = 's'; }
                            }
                            if (i < mat.GetLength(0) - 1)
                            {
                                if (mat[i + 1, j] == '.' && mat[i + 1, j] != 'X') { mat[i + 1, j] = 's'; }
                            }
                            if (j > 0)
                            {
                                if (mat[i, j - 1] == '.' && mat[i, j - 1] != 'X') { mat[i, j - 1] = 's'; }
                            }
                            if (j < mat.GetLength(1) - 1)
                            {
                                if (mat[i, j + 1] == '.' && mat[i, j + 1] != 'X') { mat[i, j + 1] = 's'; }
                            }
                        }
                    }
                }
                for(int i = 0; i < mat.GetLength(0); i++)
                {
                    for(int j = 0; j < mat.GetLength(1); j++)
                    {
                        if (mat[i,j] == 's') { mat[i, j] = 'S'; }
                    }
                }
                return mat;
            }
        }
    }
}