import java.util.*;
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 boolean addWordH(int row, int col, String word){
boolean empty = true;
if ((row>20 || row<0) || (col>20 || col<0))
return false;
int l = word.length();
if (col+l>board[row].length){
return false;
}
for (int i=0; i<l; i++){
if ((board[row][col+i] != ('-')) &&
(board[row][col+i] != (word.charAt(i))))
empty = false;
}
if (empty){
for (int j=0;j<word.length();j++){
board[row][col+j]=word.charAt(j);
}
}
return empty;
}
public boolean addWordHB(int row, int col, String word){
boolean empty = true;
if ((row>20 || row<0) || (col>20 || col<0))
return false;
int l = word.length();
if (col-l<0){
return false;
}
for (int i=0; i<l; i++){
if ((board[row][col-i] != ('-')) &&
(board[row][col-i] != (word.charAt(i))))
empty = false;
}
if (empty){
for (int j=0;j<word.length();j++){
board[row][col-j]=word.charAt(j);
}
}
return empty;
}
public boolean addWordV(int row, int col, String word){
boolean empty = true;
if ((row>20 || row<0) || (col>20 || col<0))
return false;
int l = word.length();
if (row+l>board.length){
return false;
}
for (int i=0; i<l; i++){
if ((board[row+i][col] != ('-')) &&
(board[row+i][col] != (word.charAt(i))))
empty = false;
}
if (empty){
for (int j=0;j<word.length();j++){
board[row+j][col]=word.charAt(j);
}
}
return empty;
}
public boolean addWordVB(int row, int col, String word){
boolean empty = true;
if ((row>20 || row<0) || (col>20 || col<0))
return false;
int l = word.length();
if (row-l<0){
return false;
}
for (int i=0; i<l; i++){
if ((board[row-i][col] != ('-')) &&
(board[row-i][col] != (word.charAt(i))))
empty = false;
}
if (empty){
for (int j=0;j<word.length();j++){
board[row-j][col]=word.charAt(j);
}
}
return empty;
}
public boolean addWordDDR(int row, int col, String word){
boolean empty = true;
if ((row>20 || row<0) || (col>20 || col<0))
return false;
int l = word.length();
if (row+l>board.length || col+l>board.length){
return false;
}
for (int i=0; i<l; i++){
if ((board[row+i][col+i] != ('-')) &&
(board[row+i][col+i] != (word.charAt(i))))
empty = false;
}
if (empty){
for (int j=0;j<word.length();j++){
board[row+j][col+j]=word.charAt(j);
}
}
return empty;
}
public boolean addWordDUR(int row, int col, String word){
boolean empty = true;
if ((row>20 || row<0) || (col>20 || col<0))
return false;
int l = word.length();
if (row-l<0 || col+l>board.length){
return false;
}
for (int i=0; i<l; i++){
if ((board[row-i][col+i] != ('-')) &&
(board[row-i][col+i] != (word.charAt(i))))
empty = false;
}
if (empty){
for (int j=0;j<word.length();j++){
board[row-j][col+j]=word.charAt(j);
}
}
return empty;
}
public boolean addWordDDL(int row, int col, String word){
boolean empty = true;
if ((row>20 || row<0) || (col>20 || col<0))
return false;
int l = word.length();
if (row+l>board.length || col-l<0){
return false;
}
for (int i=0; i<l; i++){
if ((board[row+i][col-i] != ('-')) &&
(board[row+i][col-i] != (word.charAt(i))))
empty = false;
}
if (empty){
for (int j=0;j<word.length();j++){
board[row+j][col-j]=word.charAt(j);
}
}
return empty;
}
public boolean addWordDUL(int row, int col, String word){
boolean empty = true;
if ((row>20 || row<0) || (col>20 || col<0))
return false;
int l = word.length();
if (row-l<0 || col-l<0){
return false;
}
for (int i=0; i<l; i++){
if ((board[row-i][col-i] != ('-')) &&
(board[row-i][col-i] != (word.charAt(i))))
empty = false;
}
if (empty){
for (int j=0;j<word.length();j++){
board[row-j][col-j]=word.charAt(j);
}
}
return empty;
}
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;
}
}