- uses math; 
- const maxn = 100; 
-       maxq = 100001; 
-       oo = 10000000; 
-       fi = ''; 
-       fo = ''; 
- type tqueue = record 
-                 front, rear, nitem: longint; 
-                 ix: array[0..maxq-1] of shortint; 
-                 iy: array[0..maxq-1] of shortint; 
-               end; 
- var m,n:byte; 
-     sx,sy,fx,fy: shortint; 
-     a,dp: array[0..maxn+1,0..maxn+1] of byte; 
-     queue: tqueue; 
- procedure enter; 
- var i,j:byte; 
-     p: char; 
- begin 
-   assign(input,fi); 
-   reset(input); 
-   readln(m,n); 
-   for i:=1 to m do 
-   begin 
-     for j:=1 to n do 
-     begin 
-       read(p); 
-       case p of 
-         'B': 
-         begin 
-           sx:=i; 
-           sy:=j; 
-           a[i,j]:=1; 
-         end; 
-         'C': 
-         begin 
-           fx:=i; 
-           fy:=j; 
-           a[i,j]:=1; 
-         end; 
-         '*': a[i,j]:=0; 
-         '.': a[i,j]:=1; 
-       end; 
-     end; 
-     readln; 
-   end; 
-   close(input); 
- end; 
- procedure init; 
- begin 
-   with queue do 
-   begin 
-     front:=0; 
-     rear:=1; 
-     nitem:=0; 
-   end; 
- end; 
- procedure push(x,y:shortint); 
- begin 
-   with queue do 
-   begin 
-     inc(nitem); 
-     front:=(front+1) mod maxq; 
-     ix[front]:=x; 
-     iy[front]:=y; 
-   end; 
- end; 
- procedure pop(var x,y:shortint); 
- begin 
-   with queue do 
-   begin 
-     dec(nitem); 
-     x:=ix[rear]; 
-     y:=iy[rear]; 
-     rear:=(rear+1) mod maxq; 
-   end; 
- end; 
- function empty:boolean; 
- begin 
-   with queue do 
-   empty:=(nitem=0); 
- end; 
- function kc(x1,y1,x2,y2:shortint):byte; 
- begin 
-   kc:=abs(x1-x2)+abs(y1-y2); 
- end; 
- procedure printa; 
- var i,j:byte; 
- begin 
-   for i:=1 to m do 
-   begin 
-     for j:=1 to n do 
-     write(dp[i,j]:3,' '); 
-     writeln; 
-   end; 
-   writeln; 
- end; 
- procedure solve; 
- var x,y,i,j:byte; 
-     d: array[0..maxn+1,0..maxn+1] of longint; 
-     free: array[0..maxn+1,0..maxn+1] of boolean; 
-     minkc:byte; 
-   procedure printa; 
-   var i,j:byte; 
-   begin 
-     for i:=1 to m do 
-     begin 
-       for j:=1 to n do 
-       write(d[i,j]:15,' '); 
-       writeln; 
-     end; 
-     writeln; 
-   end; 
- begin 
-   assign(output,fo); 
-   rewrite(output); 
-   for i:=1 to m do 
-   for j:=1 to n do 
-   d[i,j]:=oo; 
-   d[sx,sy]:=0; 
-   fillchar(free,sizeof(free),true); 
-   repeat 
-     x:=0; 
-     y:=0; 
-     for i:=1 to m do 
-     for j:=1 to n do 
-     if free[i,j] and ((d[i,j]<d[x,y]) or ((x=0) and (y=0))) and (a[i,j]=1) then 
-     begin 
-       x:=i; 
-       y:=j; 
-     end; 
-     free[x,y]:=false; 
-     if ((x=0) and (y=0)) or ((x=fx) and (y=fy)) then break; 
-     if (x>1) and (a[x-1,y]=1) and (d[x,y]+1<d[x-1,y]) then d[x-1,y]:=d[x,y]+1; 
-     if (x<m) and (a[x+1,y]=1) and (d[x,y]+1<d[x+1,y]) then d[x+1,y]:=d[x,y]+1; 
-     if (y>1) and (a[x,y-1]=1) and (d[x,y]+1<d[x,y-1]) then d[x,y-1]:=d[x,y]+1; 
-     if (y<n) and (a[x,y+1]=1) and (d[x,y]+1<d[x,y+1]) then d[x,y+1]:=d[x,y]+1; 
-   until false; 
-   writeln(d[fx,fy]); 
-   close(output); 
- end; 
- begin 
-   enter; 
-   solve; 
- end. 
-   
				dXNlcyBtYXRoOwpjb25zdCBtYXhuID0gMTAwOwogICAgICBtYXhxID0gMTAwMDAxOwogICAgICBvbyA9IDEwMDAwMDAwOwogICAgICBmaSA9ICcnOwogICAgICBmbyA9ICcnOwp0eXBlIHRxdWV1ZSA9IHJlY29yZAogICAgICAgICAgICAgICAgZnJvbnQsIHJlYXIsIG5pdGVtOiBsb25naW50OwogICAgICAgICAgICAgICAgaXg6IGFycmF5WzAuLm1heHEtMV0gb2Ygc2hvcnRpbnQ7CiAgICAgICAgICAgICAgICBpeTogYXJyYXlbMC4ubWF4cS0xXSBvZiBzaG9ydGludDsKICAgICAgICAgICAgICBlbmQ7CnZhciBtLG46Ynl0ZTsKICAgIHN4LHN5LGZ4LGZ5OiBzaG9ydGludDsKICAgIGEsZHA6IGFycmF5WzAuLm1heG4rMSwwLi5tYXhuKzFdIG9mIGJ5dGU7CiAgICBxdWV1ZTogdHF1ZXVlOwpwcm9jZWR1cmUgZW50ZXI7CnZhciBpLGo6Ynl0ZTsKICAgIHA6IGNoYXI7CmJlZ2luCiAgYXNzaWduKGlucHV0LGZpKTsKICByZXNldChpbnB1dCk7CiAgcmVhZGxuKG0sbik7CiAgZm9yIGk6PTEgdG8gbSBkbwogIGJlZ2luCiAgICBmb3Igajo9MSB0byBuIGRvCiAgICBiZWdpbgogICAgICByZWFkKHApOwogICAgICBjYXNlIHAgb2YKICAgICAgICAnQic6CiAgICAgICAgYmVnaW4KICAgICAgICAgIHN4Oj1pOwogICAgICAgICAgc3k6PWo7CiAgICAgICAgICBhW2ksal06PTE7CiAgICAgICAgZW5kOwogICAgICAgICdDJzoKICAgICAgICBiZWdpbgogICAgICAgICAgZng6PWk7CiAgICAgICAgICBmeTo9ajsKICAgICAgICAgIGFbaSxqXTo9MTsKICAgICAgICBlbmQ7CiAgICAgICAgJyonOiBhW2ksal06PTA7CiAgICAgICAgJy4nOiBhW2ksal06PTE7CiAgICAgIGVuZDsKICAgIGVuZDsKICAgIHJlYWRsbjsKICBlbmQ7CiAgY2xvc2UoaW5wdXQpOwplbmQ7CnByb2NlZHVyZSBpbml0OwpiZWdpbgogIHdpdGggcXVldWUgZG8KICBiZWdpbgogICAgZnJvbnQ6PTA7CiAgICByZWFyOj0xOwogICAgbml0ZW06PTA7CiAgZW5kOwplbmQ7CnByb2NlZHVyZSBwdXNoKHgseTpzaG9ydGludCk7CmJlZ2luCiAgd2l0aCBxdWV1ZSBkbwogIGJlZ2luCiAgICBpbmMobml0ZW0pOwogICAgZnJvbnQ6PShmcm9udCsxKSBtb2QgbWF4cTsKICAgIGl4W2Zyb250XTo9eDsKICAgIGl5W2Zyb250XTo9eTsKICBlbmQ7CmVuZDsKcHJvY2VkdXJlIHBvcCh2YXIgeCx5OnNob3J0aW50KTsKYmVnaW4KICB3aXRoIHF1ZXVlIGRvCiAgYmVnaW4KICAgIGRlYyhuaXRlbSk7CiAgICB4Oj1peFtyZWFyXTsKICAgIHk6PWl5W3JlYXJdOwogICAgcmVhcjo9KHJlYXIrMSkgbW9kIG1heHE7CiAgZW5kOwplbmQ7CmZ1bmN0aW9uIGVtcHR5OmJvb2xlYW47CmJlZ2luCiAgd2l0aCBxdWV1ZSBkbwogIGVtcHR5Oj0obml0ZW09MCk7CmVuZDsKZnVuY3Rpb24ga2MoeDEseTEseDIseTI6c2hvcnRpbnQpOmJ5dGU7CmJlZ2luCiAga2M6PWFicyh4MS14MikrYWJzKHkxLXkyKTsKZW5kOwpwcm9jZWR1cmUgcHJpbnRhOwp2YXIgaSxqOmJ5dGU7CmJlZ2luCiAgZm9yIGk6PTEgdG8gbSBkbwogIGJlZ2luCiAgICBmb3Igajo9MSB0byBuIGRvCiAgICB3cml0ZShkcFtpLGpdOjMsJyAnKTsKICAgIHdyaXRlbG47CiAgZW5kOwogIHdyaXRlbG47CmVuZDsKcHJvY2VkdXJlIHNvbHZlOwp2YXIgeCx5LGksajpieXRlOwogICAgZDogYXJyYXlbMC4ubWF4bisxLDAuLm1heG4rMV0gb2YgbG9uZ2ludDsKICAgIGZyZWU6IGFycmF5WzAuLm1heG4rMSwwLi5tYXhuKzFdIG9mIGJvb2xlYW47CiAgICBtaW5rYzpieXRlOwogIHByb2NlZHVyZSBwcmludGE7CiAgdmFyIGksajpieXRlOwogIGJlZ2luCiAgICBmb3IgaTo9MSB0byBtIGRvCiAgICBiZWdpbgogICAgICBmb3Igajo9MSB0byBuIGRvCiAgICAgIHdyaXRlKGRbaSxqXToxNSwnICcpOwogICAgICB3cml0ZWxuOwogICAgZW5kOwogICAgd3JpdGVsbjsKICBlbmQ7CmJlZ2luCiAgYXNzaWduKG91dHB1dCxmbyk7CiAgcmV3cml0ZShvdXRwdXQpOwogIGZvciBpOj0xIHRvIG0gZG8KICBmb3Igajo9MSB0byBuIGRvCiAgZFtpLGpdOj1vbzsKICBkW3N4LHN5XTo9MDsKICBmaWxsY2hhcihmcmVlLHNpemVvZihmcmVlKSx0cnVlKTsKICByZXBlYXQKICAgIHg6PTA7CiAgICB5Oj0wOwogICAgZm9yIGk6PTEgdG8gbSBkbwogICAgZm9yIGo6PTEgdG8gbiBkbwogICAgaWYgZnJlZVtpLGpdIGFuZCAoKGRbaSxqXTxkW3gseV0pIG9yICgoeD0wKSBhbmQgKHk9MCkpKSBhbmQgKGFbaSxqXT0xKSB0aGVuCiAgICBiZWdpbgogICAgICB4Oj1pOwogICAgICB5Oj1qOwogICAgZW5kOwogICAgZnJlZVt4LHldOj1mYWxzZTsKICAgIGlmICgoeD0wKSBhbmQgKHk9MCkpIG9yICgoeD1meCkgYW5kICh5PWZ5KSkgdGhlbiBicmVhazsKICAgIGlmICh4PjEpIGFuZCAoYVt4LTEseV09MSkgYW5kIChkW3gseV0rMTxkW3gtMSx5XSkgdGhlbiBkW3gtMSx5XTo9ZFt4LHldKzE7CiAgICBpZiAoeDxtKSBhbmQgKGFbeCsxLHldPTEpIGFuZCAoZFt4LHldKzE8ZFt4KzEseV0pIHRoZW4gZFt4KzEseV06PWRbeCx5XSsxOwogICAgaWYgKHk+MSkgYW5kIChhW3gseS0xXT0xKSBhbmQgKGRbeCx5XSsxPGRbeCx5LTFdKSB0aGVuIGRbeCx5LTFdOj1kW3gseV0rMTsKICAgIGlmICh5PG4pIGFuZCAoYVt4LHkrMV09MSkgYW5kIChkW3gseV0rMTxkW3gseSsxXSkgdGhlbiBkW3gseSsxXTo9ZFt4LHldKzE7CiAgdW50aWwgZmFsc2U7CiAgd3JpdGVsbihkW2Z4LGZ5XSk7CiAgY2xvc2Uob3V0cHV0KTsKZW5kOwpiZWdpbgogIGVudGVyOwogIHNvbHZlOwplbmQuCg==