import java.util.*;
import java.io.*;
public class WordSearch {
private char[][] board;
public WordSearch(int rows, int cols) {
board = new char[rows][cols];
for (int i=0;i<rows;i++) {
for (int j=0;j<cols;j++) {
board[i][j]='-';
}
}
}
public WordSearch() {
this(20,20);
}
public String toString() {
String s="";
for (int i=0;i<board.length;i++) {
for (int j=0;j<board[i].length;j++) {
s=s+board[i][j];
}
s=s+"\n";
}
return s;
}
public boolean addWordH(int row, int col, String word){
int length = word.length();
if (col + length >= board[0].length)
return false;
for (int i = 0;i<length;i++) {
if (!(board[row][i+col] == '-' || board[row][i+col] == word.charAt(i)))
return false;
}
for (int i = 0;i<length;i++)
board[row][i+col] = word.charAt(i);
return true;
}
public boolean addWordV(int row, int col, String word){
int length = word.length();
if (row + length >= board.length)
return false;
for (int i = 0;i<length;i++) {
if (!(board[row+i][col] == '-' || board[row+i][col] == word.charAt(i)))
return false;
}
for (int i = 0;i<length;i++)
board[row+i][col] = word.charAt(i);
return true;
}
public boolean addWordHBack(int row, int col, String word){
int length = word.length();
if (length>col)
return false;
for (int i = 0;i<length;i++) {
if (!(board[row][col-i] == '-' || board[row][col-i] == word.charAt(i)))
return false;
}
for (int i = 0;i<length;i++)
board[row][col-i] = word.charAt(i);
return true;
}
public boolean addWordVBack(int row, int col, String word){
int length = word.length();
if (length>row)
return false;
for (int i = 0;i<length;i++) {
if (!(board[row-i][col] == '-' || board[row-i][col] == word.charAt(i)))
return false;
}
for (int i = 0;i<length;i++)
board[row-i][col] = word.charAt(i);
return true;
}
public boolean addWordDR(int row, int col, String word){
int length = word.length();
if (length + row > board.length || length + col > board[0].length)
return false;
for (int i = 0;i<length;i++) {
if (!(board[row+i][col+i] == '-' || board[row+i][col+i] == word.charAt(i)))
return false;
}
for (int i = 0;i<length;i++)
board[row+i][col+i] = word.charAt(i);
return true;
}
public boolean addWordDL(int row, int col, String word){
int length = word.length();
if (length + row > board.length || length > col)
return false;
for (int i = 0;i<length;i++) {
if (!(board[row+i][col-i] == '-' || board[row+i][col-i] == word.charAt(i)))
return false;
}
for (int i = 0;i<length;i++)
board[row+i][col-i] = word.charAt(i);
return true;
}
public boolean addWordUR(int row, int col, String word){
int length = word.length();
if (length > row || length + col > board[0].length)
return false;
for (int i = 0;i<length;i++) {
if (!(board[row-i][col+i] == '-' || board[row-i][col+i] == word.charAt(i)))
return false;
}
for (int i = 0;i<length;i++)
board[row-i][col+i] = word.charAt(i);
return true;
}
public boolean addWordUL(int row, int col, String word){
int length = word.length();
if (length > row || length > col)
return false;
for (int i = 0;i<length;i++) {
if (!(board[row-i][col-i] == '-' || board[row-i][col-i] == word.charAt(i)))
return false;
}
for (int i = 0;i<length;i++)
board[row-i][col-i] = word.charAt(i);
return true;
}
public void fillBoard() {
Random r = new Random();
for (int i = 0;i<board.length;i++) {
for (int j = 0;j<board[i].length;j++) {
if (board[i][j] == '-')
board[i][j] = (char)('A' + r.nextInt(26));
}
}
}
}