import java.awt.Point;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.lang.reflect.Array;
import java.math.BigInteger;
import java.sql.PreparedStatement;
import java.text.Collator;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;
import java.util.Stack;
import java.util.StringTokenizer;
class TestClass {
static int[] dist ;
static int[][][] vis;
static ArrayList<Integer>[] resu;
static char[][] graph;
static int max;
static int min;
static int[][][] dp;
static int zz;
static int zzz;
static boolean fin;
static class facebook{
int x ;
int y ;
int d;
int moves;
public facebook(int x , int y , int d , int moves){
this.x = x;
this.y = y;
this.d =d;
this.moves = moves;
}
}
public static boolean check_s(int i , int j){
if(graph[i][j]==0 ||graph[i][j]==1 || graph[i][j]==2 || graph[i][j]==3 ) return true;
return false;
}
public static void check(int x , int y , int moves){
if(moves==0){
x--;
while(x>=0){
if(graph[x][y]== '#' || check_s(x, y)) break;
else{
x--;
}
}
}
else if(moves==1){
y++;
while(y<graph[0].length){
if(graph[x][y]== '#' || check_s(x, y)) break;
else{
y++;
}
}
}
else if(moves==2){
x++;
while(x<graph.length){
if(graph[x][y]== '#' || check_s(x, y)) break;
else{
x++;
}
}
}
else if(moves==3){
y--;
while(y>=0){
if(graph[x][y]== '#' || check_s(x, y)) break;
else{
y--;
}
}
}
}
public static int visitedcheck(int i , int j , int moves){
if(zz==-1) return 0;
int xx = graph[zz][zzz]+moves;
return (xx%4);
}
public static boolean iscorrect(int i , int j , int moves){
int temp;
temp=i-1;
while(temp>=0){
if(graph[temp][j]== '#') break;
else if(check_s(temp, j)){
int xx = (graph[temp][j]+ moves)%4;
if(dp
[i
][j
][xx
]==Integer.
MAX_VALUE) return false; else break;
}
temp--;
}
temp = i+1;
while(temp<graph.length){
if(graph[temp][j]== '#') break;
else if(check_s(temp, j)){
int xx = (graph[temp][j]+ moves)%4;
if(dp
[i
][j
][xx
]==Integer.
MAX_VALUE) return false; else break;
}
temp++;
}
temp = j+1;
while(temp<graph[0].length){
if(graph[i][temp]== '#') break;
else if(check_s(i, temp)){
int xx = (graph[i][temp]+ moves)%4;
if(dp
[i
][j
][xx
]==Integer.
MAX_VALUE) return false; else break;
}
temp++;
}
temp = j-1;
while(temp>=0){
if(graph[i][temp]== '#') break;
else if(check_s(i, temp)){
int xx = (graph[i][temp]+ moves)%4;
if(dp
[i
][j
][xx
]==Integer.
MAX_VALUE) return false; else break;
}
temp--;
}
return true;
}
public static void findanswer(int current_x , int current_y , int final_x, int final_y){
int[] x = {1,-1,0,0};
int[] y = {0,0,1,-1};
vis[current_x][current_y][visitedcheck(current_x, current_y, 0)] =1;
facebook obj = new facebook(current_x, current_y, 0, 0);
LinkedList<facebook> Q = new LinkedList<TestClass.facebook>();
Q.add(obj);
while(!Q.isEmpty()){
int xx = Q.peek().x;
int yy = Q.peek().y;
int d = Q.peek().d;
int mov = Q.peek().moves;
Q.pop();
for(int i=0;i<4;i++){
int dx = xx + x[i];
int dy = yy + y[i];
int moves = mov+1;
int dist = d+1;
if(dx>=0 && dy>=0 && dx<graph.length && dy<graph[0].length && graph[dx][dy]!='#' &&!check_s(dx, dy) && vis[dx][dy][visitedcheck(dx, dy, moves)]!=1){
if(iscorrect(dx, dy, moves)){
// System.out.println(dx+" "+dy+" "+moves);
if(dx==final_x && dy== final_y){
if(max>dist) max=dist;
// System.out.println(dist);
//vis[dx][dy][visitedcheck(dx, dy, moves)]=1;
}else{
obj = new facebook(dx, dy, d+1, moves);
Q.add(obj);
vis[dx][dy][visitedcheck(dx, dy, moves)]=1;
}
}
}
}
}
}
int t = in.nextInt();
for(int i=1;i<=t;i++){
int n =in.nextInt();
int m = in.nextInt();
graph = new char[n][m];
dp = new int[n][m][4];
vis = new int[n][m][4];
int sourcex = 0 , sourcey=0;
int distx=0 , disty=0;
zz= -1; zzz=-1;
for(int j=0;j<n;j++)
{
graph[j] = in.next().toCharArray();
for(int k=0;k<m;k++)
{
if(graph[j][k]=='S'){
sourcex = j;
sourcey =k;
}
if(graph[j][k] == 'G')
{
distx=j;
disty=k;
}
if(graph[j][k]=='<') {graph[j][k]=3;zz=j; zzz=k; }
if(graph[j][k]=='>') {graph[j][k]=1;zz=j; zzz=k;}
if(graph[j][k]=='^') {graph[j][k]=0; zz=j; zzz=k;}
if(graph[j][k]=='v') {graph[j][k]=2; zz=j; zzz=k;}
}
}
for(int j=0;j<n;j++)
for(int k=0;k<m;k++){
if(check_s(j, k)){
for(int mm=0;mm<4;mm++)
check(j, k, mm);
}
}
findanswer(sourcex, sourcey, distx, disty);
System.
out.
println("Case #"+i
+": "+max
); else
System.
out.
println("Case #"+i
+": impossible"); //pw.flush();
//System.out.println(iscorrect(1, 2, 2) +" " +dp[1][2][2]);
}
}
}
CmltcG9ydCBqYXZhLmF3dC5Qb2ludDsKaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRSZWFkZXI7CmltcG9ydCBqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbjsKaW1wb3J0IGphdmEuaW8uRmlsZVJlYWRlcjsKaW1wb3J0IGphdmEuaW8uRmlsZVdyaXRlcjsKaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CmltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwppbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbVJlYWRlcjsKaW1wb3J0IGphdmEuaW8uUHJpbnRXcml0ZXI7CmltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5BcnJheTsKaW1wb3J0IGphdmEubWF0aC5CaWdJbnRlZ2VyOwppbXBvcnQgamF2YS5zcWwuUHJlcGFyZWRTdGF0ZW1lbnQ7CmltcG9ydCBqYXZhLnRleHQuQ29sbGF0b3I7CmltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwppbXBvcnQgamF2YS51dGlsLkFycmF5czsKaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKaW1wb3J0IGphdmEudXRpbC5Db21wYXJhdG9yOwppbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CmltcG9ydCBqYXZhLnV0aWwuTGlua2VkTGlzdDsKaW1wb3J0IGphdmEudXRpbC5RdWV1ZTsKaW1wb3J0IGphdmEudXRpbC5TY2FubmVyOwppbXBvcnQgamF2YS51dGlsLlN0YWNrOwppbXBvcnQgamF2YS51dGlsLlN0cmluZ1Rva2VuaXplcjsKIAogCiAKIAogCiBjbGFzcyBUZXN0Q2xhc3MgewogCnN0YXRpYyBpbnRbXSBkaXN0IDsJCnN0YXRpYyBpbnRbXVtdW10gdmlzOwpzdGF0aWMgQXJyYXlMaXN0PEludGVnZXI+W10gcmVzdTsKc3RhdGljIGNoYXJbXVtdIGdyYXBoOwpzdGF0aWMgaW50IG1heDsKc3RhdGljIGludCBtaW47CnN0YXRpYyBpbnRbXVtdW10gZHA7CnN0YXRpYyBpbnQgeno7CnN0YXRpYyBpbnQgenp6OwpzdGF0aWMgYm9vbGVhbiBmaW47CgoKc3RhdGljIGNsYXNzIGZhY2Vib29rewoJCglpbnQgeCA7CglpbnQgeSA7CglpbnQgZDsKCWludCBtb3ZlczsKCQoJcHVibGljICBmYWNlYm9vayhpbnQgeCAsIGludCB5ICwgaW50IGQgLCBpbnQgbW92ZXMpewoJCSAgIHRoaXMueCA9IHg7CgkJICAgdGhpcy55ID0geTsKCQkgICB0aGlzLmQgPWQ7CgkJICAgdGhpcy5tb3ZlcyA9IG1vdmVzOwoJfQoJCn0KCnB1YmxpYyBzdGF0aWMgYm9vbGVhbiBjaGVja19zKGludCBpICwgaW50IGopewoJCglpZihncmFwaFtpXVtqXT09MCB8fGdyYXBoW2ldW2pdPT0xIHx8IGdyYXBoW2ldW2pdPT0yIHx8IGdyYXBoW2ldW2pdPT0zICkgcmV0dXJuIHRydWU7CgkKCXJldHVybiBmYWxzZTsKfQoKCnB1YmxpYyBzdGF0aWMgdm9pZCBjaGVjayhpbnQgeCAsIGludCB5ICwgaW50IG1vdmVzKXsKCQogICAgICAgIGlmKG1vdmVzPT0wKXsKICAgICAgICAJeC0tOwogICAgICAgICAgd2hpbGUoeD49MCl7CiAgICAgICAgCSAgCiAgICAgICAgCSBpZihncmFwaFt4XVt5XT09ICcjJyB8fCBjaGVja19zKHgsIHkpKSBicmVhazsKICAgICAgICAJIGVsc2V7CiAgICAgICAgCQkgIGRwW3hdW3ldWzBdID0gSW50ZWdlci5NQVhfVkFMVUU7CiAgICAgICAgCQkgIHgtLTsKICAgICAgICAJIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxzZSBpZihtb3Zlcz09MSl7CiAgICAgICAgCSAgIHkrKzsKICAgICAgICAJICAgd2hpbGUoeTxncmFwaFswXS5sZW5ndGgpewogICAgICAgIAkJCSBpZihncmFwaFt4XVt5XT09ICcjJyB8fCBjaGVja19zKHgsIHkpKSBicmVhazsKICAgICAgICAJCQkgZWxzZXsKICAgICAgICAJCQkJIGRwW3hdW3ldWzFdID0gSW50ZWdlci5NQVhfVkFMVUU7CiAgICAgICAgCQkJCSB5Kys7CiAgICAgICAgCQkJIH0KICAgICAgICAJICAgfQogICAgICAgIAkKICAgICAgICB9CiAgICAgICAgZWxzZSBpZihtb3Zlcz09Mil7CiAgICAgICAgCXgrKzsKICAgICAgICAJd2hpbGUoeDxncmFwaC5sZW5ndGgpewogICAgICAgIAkJIGlmKGdyYXBoW3hdW3ldPT0gJyMnIHx8IGNoZWNrX3MoeCwgeSkpIGJyZWFrOwogICAgICAgIAkJIGVsc2V7CiAgICAgICAgCQkJIGRwW3hdW3ldWzJdID1JbnRlZ2VyLk1BWF9WQUxVRTsKICAgICAgICAJCQkgeCsrOwogICAgICAgIAkJIH0KICAgICAgICAJfQogICAgICAgIH0KICAgICAgICBlbHNlIGlmKG1vdmVzPT0zKXsKICAgICAgICAJeS0tOwogICAgICAgIAl3aGlsZSh5Pj0wKXsKICAgICAgICAJCSBpZihncmFwaFt4XVt5XT09ICcjJyB8fCBjaGVja19zKHgsIHkpKSBicmVhazsKICAgICAgICAJCSBlbHNlewogICAgICAgIAkJCSBkcFt4XVt5XVszXSA9SW50ZWdlci5NQVhfVkFMVUU7CiAgICAgICAgCQkJIHktLTsKICAgICAgICAJCSB9CiAgICAgICAgCX0KICAgICAgICB9CgkKCQp9CnB1YmxpYyBzdGF0aWMgaW50IHZpc2l0ZWRjaGVjayhpbnQgaSAsIGludCBqICwgaW50IG1vdmVzKXsKCSAgCglpZih6ej09LTEpIHJldHVybiAwOwoJCglpbnQgeHggPSBncmFwaFt6el1benp6XSttb3ZlczsKCXJldHVybiAoeHglNCk7Cn0KCnB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc2NvcnJlY3QoaW50IGkgLCBpbnQgaiAsIGludCBtb3Zlcyl7CglpbnQgdGVtcDsKCSAgdGVtcD1pLTE7CgkgICB3aGlsZSh0ZW1wPj0wKXsKCQkgICAKCQkgICBpZihncmFwaFt0ZW1wXVtqXT09ICcjJykgYnJlYWs7CgkJICAgZWxzZSBpZihjaGVja19zKHRlbXAsIGopKXsKCQkJICAgCgkJCSAgIGludCB4eCA9IChncmFwaFt0ZW1wXVtqXSsgbW92ZXMpJTQ7CgkJCSAgIGlmKGRwW2ldW2pdW3h4XT09SW50ZWdlci5NQVhfVkFMVUUpIHJldHVybiBmYWxzZTsKCQkJICAgZWxzZSBicmVhazsKCQkgICB9CgkJICAgICB0ZW1wLS07CgkJCSAgIAoJCSAgIAoJICAgfQoJICAKCSAgIHRlbXAgPSBpKzE7CgkgICB3aGlsZSh0ZW1wPGdyYXBoLmxlbmd0aCl7CgkJICAgCgkJICAgaWYoZ3JhcGhbdGVtcF1bal09PSAnIycpIGJyZWFrOwoJCSAgIGVsc2UgaWYoY2hlY2tfcyh0ZW1wLCBqKSl7CgkJCSAgIAoJCQkgICBpbnQgeHggPSAoZ3JhcGhbdGVtcF1bal0rIG1vdmVzKSU0OwoJCQkgICBpZihkcFtpXVtqXVt4eF09PUludGVnZXIuTUFYX1ZBTFVFKSByZXR1cm4gZmFsc2U7CgkJCSAgIGVsc2UgYnJlYWs7CgkJICAgfQoJCSAgICAgdGVtcCsrOwoJICAgfQoJICAgCgkgICB0ZW1wID0gaisxOwoJICAgd2hpbGUodGVtcDxncmFwaFswXS5sZW5ndGgpewoJCSAgIAoJCSAgIGlmKGdyYXBoW2ldW3RlbXBdPT0gJyMnKSBicmVhazsKCQkgICBlbHNlIGlmKGNoZWNrX3MoaSwgdGVtcCkpewoJCQkgICAKCQkJICAgaW50IHh4ID0gKGdyYXBoW2ldW3RlbXBdKyBtb3ZlcyklNDsKCQkJICAKCQkJICAgaWYoZHBbaV1bal1beHhdPT1JbnRlZ2VyLk1BWF9WQUxVRSkgcmV0dXJuIGZhbHNlOwoJCQkgICBlbHNlIGJyZWFrOwoJCSAgIH0KCQkgICAgIHRlbXArKzsKCSAgIH0KCSAgIHRlbXAgPSBqLTE7CgkgICB3aGlsZSh0ZW1wPj0wKXsKCQkgICBpZihncmFwaFtpXVt0ZW1wXT09ICcjJykgYnJlYWs7CgkJICAgZWxzZSBpZihjaGVja19zKGksIHRlbXApKXsKCQkJICAgCgkJCSAgIGludCB4eCA9IChncmFwaFtpXVt0ZW1wXSsgbW92ZXMpJTQ7CgkJCSAgIGlmKGRwW2ldW2pdW3h4XT09SW50ZWdlci5NQVhfVkFMVUUpIHJldHVybiBmYWxzZTsKCQkJICAgZWxzZSBicmVhazsKCQkgICB9CgkJICAgICB0ZW1wLS07CgkgICB9CgkgICAKCSAgIAoJCgkgcmV0dXJuIHRydWU7Cn0KCnB1YmxpYyBzdGF0aWMgdm9pZCBmaW5kYW5zd2VyKGludCBjdXJyZW50X3ggLCBpbnQgY3VycmVudF95ICwgaW50IGZpbmFsX3gsIGludCBmaW5hbF95KXsKCQoJICAKCSAgaW50W10geCA9IHsxLC0xLDAsMH07CgkgIGludFtdIHkgPSB7MCwwLDEsLTF9OwoJIHZpc1tjdXJyZW50X3hdW2N1cnJlbnRfeV1bdmlzaXRlZGNoZWNrKGN1cnJlbnRfeCwgY3VycmVudF95LCAwKV0gPTE7CgkgIGZhY2Vib29rIG9iaiA9IG5ldyBmYWNlYm9vayhjdXJyZW50X3gsIGN1cnJlbnRfeSwgMCwgMCk7CgkgIExpbmtlZExpc3Q8ZmFjZWJvb2s+IFEgPSBuZXcgTGlua2VkTGlzdDxUZXN0Q2xhc3MuZmFjZWJvb2s+KCk7CgkgIFEuYWRkKG9iaik7CgkgIAoJICB3aGlsZSghUS5pc0VtcHR5KCkpewoJCSAgCgkJICBpbnQgeHggPSAgUS5wZWVrKCkueDsKCQkgIGludCB5eSA9IFEucGVlaygpLnk7CgkJICBpbnQgZCA9IFEucGVlaygpLmQ7CgkJICBpbnQgbW92ID0gUS5wZWVrKCkubW92ZXM7CgkJICBRLnBvcCgpOwoJCSAgCgkJICBmb3IoaW50IGk9MDtpPDQ7aSsrKXsKCQkJICAKCQkJICBpbnQgZHggPSB4eCArIHhbaV07CgkJCSAgaW50IGR5ID0geXkgKyB5W2ldOwoJCQkgIGludCBtb3ZlcyA9IG1vdisxOwoJCQkgIGludCBkaXN0ID0gZCsxOwoJaWYoZHg+PTAgJiYgZHk+PTAgJiYgZHg8Z3JhcGgubGVuZ3RoICYmIGR5PGdyYXBoWzBdLmxlbmd0aCAmJiBncmFwaFtkeF1bZHldIT0nIycgJiYhY2hlY2tfcyhkeCwgZHkpICYmIHZpc1tkeF1bZHldW3Zpc2l0ZWRjaGVjayhkeCwgZHksIG1vdmVzKV0hPTEpewoJCQoJCSAgICAgICAgICAgICBpZihpc2NvcnJlY3QoZHgsIGR5LCBtb3ZlcykpewoJCSAgICAgICAgICAgIAkvLyBTeXN0ZW0ub3V0LnByaW50bG4oZHgrIiAiK2R5KyIgIittb3Zlcyk7CgkJICAgICAgICAgICAgCSBpZihkeD09ZmluYWxfeCAmJiBkeT09IGZpbmFsX3kpewoJCSAgICAgICAgICAgIAkJIGlmKG1heD5kaXN0KSBtYXg9ZGlzdDsKCQkgICAgICAgICAgICAJCS8vIFN5c3RlbS5vdXQucHJpbnRsbihkaXN0KTsKCQkgICAgICAgICAgICAJCSAvL3Zpc1tkeF1bZHldW3Zpc2l0ZWRjaGVjayhkeCwgZHksIG1vdmVzKV09MTsKCQkgICAgICAgICAgICAJIH1lbHNlewoJCSAgICAgICAgICAgIAkgb2JqID0gbmV3IGZhY2Vib29rKGR4LCBkeSwgZCsxLCBtb3Zlcyk7CgkJICAgICAgICAgICAgCSBRLmFkZChvYmopOwoJCSAgICAgICAgICAgIAkgdmlzW2R4XVtkeV1bdmlzaXRlZGNoZWNrKGR4LCBkeSwgbW92ZXMpXT0xOwoJCSAgICAgICAgICAgIAkgCgkJICAgICAgICAgICAgCSB9CgkJICAgICAgICAgICAgCSAKCQkgICAgICAgICAgICAgfQoJfQoJCSAgfQoJCSAgCgkgIH0KCSAgCgkgIAkgIAoJCiAgCgkJCSAgICAgCgkJICAKCQkgIAoKfQoKCnB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZyBhcmdzW10gKSB0aHJvd3MgSU9FeGNlcHRpb24gIHsKIAoKU2Nhbm5lciBpbiA9IG5ldyBTY2FubmVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihTeXN0ZW0uaW4pKTsKaW50IHQgPSBpbi5uZXh0SW50KCk7CmZvcihpbnQgaT0xO2k8PXQ7aSsrKXsKCWludCBuID1pbi5uZXh0SW50KCk7CglpbnQgbSA9IGluLm5leHRJbnQoKTsKCWdyYXBoID0gbmV3IGNoYXJbbl1bbV07CglkcCA9IG5ldyBpbnRbbl1bbV1bNF07Cgl2aXMgPSBuZXcgaW50W25dW21dWzRdOwoJaW50IHNvdXJjZXggPSAwICwgc291cmNleT0wOwoJaW50IGRpc3R4PTAgLCBkaXN0eT0wOwoJeno9IC0xOyB6eno9LTE7CgkKCWZvcihpbnQgaj0wO2o8bjtqKyspCgl7CQoJCWdyYXBoW2pdID0gIGluLm5leHQoKS50b0NoYXJBcnJheSgpOwoJCWZvcihpbnQgaz0wO2s8bTtrKyspCgkJewoJCQlpZihncmFwaFtqXVtrXT09J1MnKXsKCQkJCXNvdXJjZXggPSBqOwoJCQkJc291cmNleSA9azsKCQkJfQoJCQkKCQkJaWYoZ3JhcGhbal1ba10gPT0gJ0cnKQoJCQl7CgkJCQkgZGlzdHg9ajsKCQkJCSBkaXN0eT1rOwoJCQl9CgkJCWlmKGdyYXBoW2pdW2tdPT0nPCcpIHtncmFwaFtqXVtrXT0zO3p6PWo7IHp6ej1rOyB9CgkJCWlmKGdyYXBoW2pdW2tdPT0nPicpIHtncmFwaFtqXVtrXT0xO3p6PWo7IHp6ej1rO30KCQkJaWYoZ3JhcGhbal1ba109PSdeJykge2dyYXBoW2pdW2tdPTA7IHp6PWo7IHp6ej1rO30KCQkJaWYoZ3JhcGhbal1ba109PSd2Jykge2dyYXBoW2pdW2tdPTI7IHp6PWo7IHp6ej1rO30KCQl9CgkKCQoJfQoJZm9yKGludCBqPTA7ajxuO2orKykKCQlmb3IoaW50IGs9MDtrPG07aysrKXsKCQkJCgkJCWlmKGNoZWNrX3MoaiwgaykpewoJCSAgICAgCgkJCWZvcihpbnQgbW09MDttbTw0O21tKyspCgkJCSAgY2hlY2soaiwgaywgbW0pOwoJCSAgICAgCgkJCX0KCQl9CgltYXggPUludGVnZXIuTUFYX1ZBTFVFOwoJZmluZGFuc3dlcihzb3VyY2V4LCBzb3VyY2V5LCBkaXN0eCwgZGlzdHkpOwoKICAgIGlmKG1heCE9SW50ZWdlci5NQVhfVkFMVUUpCglTeXN0ZW0ub3V0LnByaW50bG4oIkNhc2UgIyIraSsiOiAiK21heCk7CiAgICBlbHNlCiAgICAJU3lzdGVtLm91dC5wcmludGxuKCJDYXNlICMiK2krIjogaW1wb3NzaWJsZSIpOwogICAgLy9wdy5mbHVzaCgpOwoJLy9TeXN0ZW0ub3V0LnByaW50bG4oaXNjb3JyZWN0KDEsIDIsIDIpICsiICIgK2RwWzFdWzJdWzJdKTsKCQoJCQoJCgkJCQkgCgkKfQoKCgp9CiB9CiA=