var fs = require('fs'),
    length = fs.fstatSync(process.stdin.fd).size,
    buffer = new Buffer(length),
    bytesRead = fs.readSync(process.stdin.fd, buffer, 0, length, 0),
    input = buffer.toString('utf8', 0, bytesRead).split('\n');


var i = 0;
while(true){
  var fieldInfo = input[i].split(' ');
  var width = fieldInfo[0] - 0;//toInt
  var height = fieldInfo[1] - 0;//toInt
  
  // 0 0が入力された
  if(!width && !height){
    break;
  }
  
  var start;
  var goal;
  var elem = [[],[],[],[],[]];
  
  var c;
  for(var y = height; y--;){
    i++;//1行進める
    var ni = input[i];
    for(var x = width; x--;){// なぜか順列アクセスの方が早い
      c = ni[x];
      
      if(c == '.'){
        // ドットが一番多いはずなので、先にひっかけてしまう
      }else if(c == '1' || c == '2' || c == '3' || c == '4' || c == '5'){
        // 次に多いはずの属性を潰す
        var e = elem[c - 1];
        e[e.length] = pos(x, y);
      }else if(c == 'S'){
        start = pos(x, y);
      }else{
        goal = pos(x, y);
      }
      
    }
  }
  
  var INF = 1 << 30;
  var bestElement = -1;
  var distance = INF;
  
  // 属性ごとにループ
  for (var startElem = 0; startElem < 5; startElem++) {
    // DPの初期化 DP[属性][同じ属性内の連番]
    var dp = [[],[],[],[],[]];
    for(var h = 5; h--;){
      var hLength = elem[h].length;
      dp[h].length = hLength;
      var initdph = dp[h];
      for(; hLength--;){
        initdph[hLength] = INF;
      }
    }
    
    // 最初に選んだパチモンから次に捕まえられる属性番号
    var first = (startElem + 1) % 5;
    
    var firstLength = elem[first].length;
    var dpf = dp[first];
    var elemf = elem[first];
    for (var j = 0; j < firstLength; j++) {
      // s→e1を計算
      dpf[j] = dist(start, elemf[j]);
    }
    
    // s->1->2->3->4->g
    // なので、ループは間の-> * 3分まわす
    var now = first;
    var dpnw = dpf;
    var elnw = elemf;
    var nowLength = elnw.length;
    var next;
    var dpnx;
    var elnx;
    var nextLength;
    for (var e = 0; e < 3; e++) {
      // ex->e(x+1)
      next = (now + 1) % 5;
      dpnx = dp[next];
      elnx = elem[next];
      nextLength = elnx.length;
      for (var j = 0; j < nowLength; j++) {
        var dpnwj = dpnw[j];
        var elnwj = elnw[j];
        for (var k = 0; k < nextLength; k++) {
          dpnx[k] = min(
            dpnx[k],
            dpnwj + 
            dist(elnwj, elnx[k]));
        }
      }
      now = next;
      dpnw = dpnx;
      elnw = elnx;
      nowLength = elnw.length;
    }
    
    for (var j = 0; j < nextLength; j++) {
      // e4->g
      var d = dpnx[j] + dist(elnx[j], goal);
      
      if (d < distance) {
        distance = d;
        bestElement = startElem + 1;
      }
      
    }
    
  }
  
  if (distance == INF) {
    console.log("NA");
  } else {
    console.log(bestElement + " " + distance);
  }
  
  i++;
}

}
               
function dist(from, to){
  // x座標とy座標の切り出し(11ビット右シフトでxを、2047(下位10ビット1)とのAND演算でyを取り出す)
  return abs((from >> 11) - (to >> 11)) + abs((from & 2047) - (to & 2047));
}

function min(a, b){
  // ビット演算で高速化
  return b + ((a - b) & ((a - b) >> 31));// 変数宣言よりもこっちの方が高速
}

function pos(a, b){
  // 2^10 = 1024なので、下位10ビットでy座標を、上位ビットでx座標を表す
  return (a << 11) + b;
}

function abs(a){
  // ビット演算で高速化
  return (a ^ (a >> 31)) - (a >> 31);// これも
}