private boolean feasible( Level level, int remain_depth ) throws IOException {
        if ( remain_depth > 0 ) {
            for ( int step = 0; step < 5; step++ ) {
                Level step_level = new Level( level );
                if ( step == 4 ) {
                    step_level.swapHunter();
                    if ( feasible( step_level, --remain_depth ) ) {
                        return true;
                    }
                } else if( step_level.moveHunter( Level.dir.get( step ) ) ) {
                    if ( step_level.targets == 0 ) {
                        return true;
                    } else if ( feasible( step_level, --remain_depth ) ) {
                        return true;
                    }
                }
            }
        }
        return false;
    }