void stacks(struct board_position pos, int k, int l, int turn, int *nc, char *child_ptr)
{
	struct node root;
	struct node leaf;
	struct node ply_node;
	struct node stk[STK_SIZE];

	struct board_position p;
	int i;
	int j;
	int v = -1;
	int flag;
	int ply = -1;

	init_new_node(pos, k, l, &root);
	ply++;
	stk[ply] = root;
	
	while (ply != -1) {
		if (ply < LEAF_DEPTH) {
			ply_node = stk[ply];
			
			if (ply_node.it < ply_node.nc) {
				int index[2];
				
				ply_node.it++;
				
				flag = 0;
				index[0] = ply_node.k;
				index[1] = ply_node.l;
				i = index[0];
				j = index[1];
				v = ply_node.child[ply_node.it - 1];
				p = ply_node.pos;
				
				if (v == '0' && p.board[i][j] != WPAWN) {
					flag = leftJumpDown(p.board, turn, index);
				} else if (v == '1' && p.board[i][j] != WPAWN) {
					flag = rightJumpDown(p.board, turn, index);
				} else if (v == '2' && p.board[i][j] != BPAWN) {
					flag = leftJumpUp(p.board, turn, index);
				} else if (v == '3' && p.board[i][j] != BPAWN) {
					flag = rightJumpUp(p.board, turn, index);
				}

				if (flag) {
					init_new_node(p, index[0], index[1], &leaf);
					
					insert_into_array(p, *nc, child_ptr);
					(*nc)++;

					stk[ply] = ply_node;
					ply++;
					stk[ply] = leaf;
				} else {
					stk[ply] = ply_node;
				}
			} else {
				ply--;
			}
		} else {
			ply--;
			ply_node = stk[ply];
		}
	}
}
void insert_names(char* val) {
	names = init_new_node(names, val);
}