// NAME : Ben Mehne
// DIVISION :
Senior-3
// PROBLEM ID :
ACSL #3 Senet
// SCHOOL :
Kalamazoo AMSC
import java.io.*;
import java.util.*;
public class SeniorSenet
{
public static
void main(String[] args) throws IOException
{
// Use
BufferedReader rather than RandomAccessFile; it's much faster
BufferedReader inp = new BufferedReader(
new
InputStreamReader(System.in));
//output
PrintWriter
out = new PrintWriter(new BufferedWriter(
new
OutputStreamWriter(System.out)));
for (int m =
0; m < 1; m++)
{
//Write
Code
SenetPiece[] map = new SenetPiece[30], map2;
StringTokenizer stk;// = new
StringTokenizer(inp.readLine(), ", ");
int temp,
temp2;
for (int
k = 0; k < 2; k++)
{
stk =
new StringTokenizer(inp.readLine(), ", ");
temp2
= Integer.parseInt(stk.nextToken());
for
(int i = 0; i < temp2; i++)
{
temp = Integer.parseInt(stk.nextToken());
map[temp - 1] = new SenetPiece(temp, k + 1);
}
}
stk = new
StringTokenizer(inp.readLine(), ", ");
boolean
done;
SenetPiece[] temps = new SenetPiece[2];
SenetPiece tempss = new SenetPiece(-1,-1);
while
(stk.hasMoreTokens())
{
for
(int k = 0; k < 2; k++)
{
done = false;
temp2 = Integer.parseInt(stk.nextToken());
map2 = copy(map);
for (int i = 29; i >= 0; i--)
{
if(map[i] == null)
continue;
//System.out.println("\t\t"+i + " "+
map[i].getColor()+ " " + map[i].getPlace());
//if(map2[i]!= null)
//System.out.println("\t\t"+i + " "+
map2[i].getColor() + " " + map2[i].getPlace());
if (map[i].getColor() == k + 1)
{
if(k == 1 && temps[0].getPlace() != 31)
tempss =
map2[temps[0].getPlace()-1];
temps[k] = map2[i];
//System.out.println("\tb "+ temps[k].getPlace() + "
" + (k+1));
move(temps[k], temp2, map2);
if (temps[k].hasMoved())
{
//System.out.println("\t"+ temps[k].getPlace() + " "
+ (k+1));
if(k == 1 &&
temps[0].getPlace() != 31)
temps[0] = tempss;
done = true;
break;
}
}
map2 = copy(map);
}
map = map2;
if (!done)
System.out.print("NO VALID MOVES");
}
System.out.println(temps[0].getState()+","+temps[1].getState());
}
}
out.close();
}
private static
SenetPiece[] copy (SenetPiece[] map)
{
SenetPiece[]
ret = new SenetPiece[map.length];
for(int i =
0; i < map.length; i++)
{
if(map[i]!= null)
ret[i] =
map[i].getCopy();
}
return ret;
}
private static
void move(SenetPiece piece, int moves, SenetPiece[] map)
{
SenetPiece
temp;
if
(piece.getPlace() + moves < 26)
{
if
(map[piece.getPlace() - 1 + moves] != null && map[piece.getPlace() - 1
+ moves].getColor() == piece.getColor())
{
//System.out.println("???"+ (piece.getPlace() - 1 + moves));
piece.cantMove();
return;
}
temp =
map[piece.getPlace() - 1 + moves];
map[piece.getPlace() - 1 + moves] = map[piece.getPlace() - 1];
map[piece.getPlace() - 1] = temp;
if (temp
!= null)
temp.setPlace(piece.getPlace());
piece.setPlace(piece.getPlace() + moves);
}
else if
(piece.getPlace() < 26)
{
if
(map[25] != null && map[25].getColor() == piece.getColor())
{
piece.cantMove();
return;
}
temp =
map[25];
map[25] =
map[piece.getPlace() - 1];
map[piece.getPlace() - 1] = temp;
if (temp
!= null)
temp.setPlace(piece.getPlace());
piece.setPlace(26);
}
else if
(piece.getPlace() > 27 || piece.getPlace() + moves == 31)
if
(piece.getPlace() + moves == 31)
{
//System.out.println("dfd");
map[piece.getPlace() - 1] = null;
piece.setPlace(31);
piece.done();
}
else if
(piece.getPlace() + moves > 31 || piece.getPlace()+moves == 30 &&
map[29]!= null)
piece.cantMove();
else
{
if
(map[piece.getPlace() - 1 + moves] != null && map[piece.getPlace() - 1
+ moves].getColor() == piece.getColor())
{
piece.cantMove();
return;
}
temp
= map[piece.getPlace() - 1 + moves];
map[piece.getPlace() - 1 + moves] = map[piece.getPlace() - 1];
map[piece.getPlace() - 1] = temp;
if
(temp != null)
temp.setPlace(piece.getPlace());
piece.setPlace(piece.getPlace() + moves);
}
else if
(piece.getPlace() == 26)
if (moves
!= 1)
{
if
(map[piece.getPlace() - 1 + moves] != null && map[piece.getPlace() - 1
+ moves].getColor() == piece.getColor())
{
piece.cantMove();
return;
}
temp
= map[piece.getPlace() - 1 + moves];
map[piece.getPlace() - 1 + moves] = map[piece.getPlace() - 1];
map[piece.getPlace() - 1] = temp;
if
(temp != null)
temp.setPlace(piece.getPlace());
piece.setPlace(piece.getPlace() + moves);
}
else if
(map[26] != null && map[26].getColor() == piece.getColor())
{// 27 is
taken
piece.cantMove();
}
else if
(map[14] != null && map[14].getColor() == piece.getColor()) //cant go
to 15
{
temp
= map[26];
map[26] = map[piece.getPlace() - 1];
map[piece.getPlace() - 1] = temp;
if
(temp != null)
temp.setPlace(piece.getPlace());
piece.setPlace(27);
}
else if
(map[14] != null) // plce 15 has opposite color
{
temp
= map[26];
map[26] = map[piece.getPlace() - 1];
map[piece.getPlace() - 1] = temp;
if (temp != null)
temp.setPlace(piece.getPlace());
piece.setPlace(27);
map[26] = map[14];
map[14] = piece;
map[26].setPlace(27);
map[14].setPlace(15);
}
else //
place 15 is empty
{
//
switch 27 & 26
temp
= map[26];
map[26] = map[piece.getPlace() - 1];
map[piece.getPlace() - 1] = temp;
if
(temp != null)
temp.setPlace(piece.getPlace());
piece.setPlace(27);
//
switch 27 && 15
temp
= map[14];
map[14] = map[piece.getPlace() - 1];
map[piece.getPlace() - 1] = temp;
if
(temp != null)
temp.setPlace(piece.getPlace());
piece.setPlace(15);
}
}
}