include(os_flags)
include(sanitizer)
include(cross_compiled_func)
+include(faster_build)
function(set_ci_build_number)
set(OpenVINO_MAIN_SOURCE_DIR "${CMAKE_SOURCE_DIR}")
--- /dev/null
+# Copyright (C) 2020 Intel Corporation
+# SPDX-License-Identifier: Apache-2.0
+#
+
+include(CMakeParseArguments)
+
+function(ie_faster_build TARGET_NAME)
+ if(NOT ENABLE_FASTER_BUILD)
+ return()
+ endif()
+
+ cmake_parse_arguments(IE_FASTER_BUILD "UNITY" "" "PCH" ${ARGN})
+
+ if(IE_FASTER_BUILD_UNITY)
+ set_target_properties(${TARGET_NAME}
+ PROPERTIES
+ UNITY_BUILD ON
+ )
+ endif()
+
+ if(IE_FASTER_BUILD_PCH)
+ target_precompile_headers(${TARGET_NAME}
+ ${IE_FASTER_BUILD_PCH}
+ )
+ endif()
+endfunction()
# Documentation build
ie_option (ENABLE_DOCS "build docs using Doxygen" OFF)
+
+ie_dependent_option (ENABLE_FASTER_BUILD "Enable build features (PCH, UNITY) to speed up build time" OFF "CMAKE_VERSION VERSION_GREATER_EQUAL 3.16" OFF)
add_library(${TARGET_NAME}_common_obj OBJECT
${IE_BASE_SOURCE_FILES})
+ie_faster_build(${TARGET_NAME}_common_obj
+ UNITY
+ PCH PRIVATE "precomp.hpp"
+)
+
target_compile_definitions(${TARGET_NAME}_common_obj PRIVATE IMPLEMENT_INFERENCE_ENGINE_API)
target_include_directories(${TARGET_NAME}_common_obj PRIVATE
"${CMAKE_CURRENT_SOURCE_DIR}"
${LIBRARY_HEADERS}
${PUBLIC_HEADERS})
+ie_faster_build(${TARGET_NAME}_obj
+ UNITY
+)
+
target_compile_definitions(${TARGET_NAME}_obj PRIVATE IMPLEMENT_INFERENCE_ENGINE_API)
target_include_directories(${TARGET_NAME}_obj SYSTEM PRIVATE $<TARGET_PROPERTY:ngraph::ngraph,INTERFACE_INCLUDE_DIRECTORIES>
--- /dev/null
+// Copyright (C) 2020 Intel Corporation
+// SPDX-License-Identifier: Apache-2.0
+//
+
+#pragma once
+
+#include <ngraph/ngraph.hpp>
+#include <ngraph/ops.hpp>
+
+#include <algorithm>
+#include <functional>
+#include <initializer_list>
+#include <iterator>
+#include <map>
+#include <memory>
+#include <numeric>
+#include <ostream>
+#include <set>
+#include <sstream>
+#include <string>
+#include <tuple>
+#include <type_traits>
+#include <typeinfo>
+#include <unordered_set>
+#include <utility>
+#include <vector>
+
+#include <cassert>
+#include <cctype>
+#include <cmath>
+#include <cstdlib>
+#include <cstring>
}
for (auto streamId = 0; streamId < _config._streams; ++streamId) {
_threads.emplace_back([this, streamId] {
- itt::threadName(_config._name + "_" + std::to_string(streamId));
+ openvino::itt::threadName(_config._name + "_" + std::to_string(streamId));
for (bool stopped = false; !stopped;) {
Task task;
{
${LIBRARY_SRC}
${PUBLIC_HEADERS})
+ie_faster_build(${TARGET_NAME}_obj
+ PCH PRIVATE "src/precomp.hpp"
+)
+
set_ie_threading_interface_for(${TARGET_NAME}_obj)
target_compile_definitions(${TARGET_NAME}_obj PRIVATE IMPLEMENT_INFERENCE_ENGINE_API)
--- /dev/null
+// Copyright (C) 2020 Intel Corporation
+// SPDX-License-Identifier: Apache-2.0
+//
+
+#pragma once
+
+#include <algorithm>
+#include <functional>
+#include <initializer_list>
+#include <iterator>
+#include <map>
+#include <memory>
+#include <numeric>
+#include <ostream>
+#include <set>
+#include <sstream>
+#include <string>
+#include <tuple>
+#include <type_traits>
+#include <typeinfo>
+#include <unordered_set>
+#include <utility>
+#include <vector>
+
+#include <cassert>
+#include <cctype>
+#include <cmath>
+#include <cstdlib>
+#include <cstring>
${LIBRARY_SRC}
${PUBLIC_HEADERS})
+ie_faster_build(${TARGET_NAME}
+ UNITY
+ PCH PRIVATE "src/precomp.hpp"
+)
+
target_compile_definitions(${TARGET_NAME} PRIVATE IMPLEMENT_INFERENCE_ENGINE_API)
target_link_libraries(${TARGET_NAME} PRIVATE inference_engine openvino::itt)
--- /dev/null
+// Copyright (C) 2020 Intel Corporation
+// SPDX-License-Identifier: Apache-2.0
+//
+
+#pragma once
+
+#include <algorithm>
+#include <functional>
+#include <initializer_list>
+#include <iterator>
+#include <map>
+#include <memory>
+#include <numeric>
+#include <ostream>
+#include <set>
+#include <sstream>
+#include <string>
+#include <tuple>
+#include <type_traits>
+#include <typeinfo>
+#include <unordered_set>
+#include <utility>
+#include <vector>
+
+#include <cassert>
+#include <cctype>
+#include <cmath>
+#include <cstdlib>
+#include <cstring>
add_library(${TARGET_NAME} SHARED ${LIBRARY_SRC} ${PUBLIC_HEADERS})
+ie_faster_build(${TARGET_NAME}
+ PCH PRIVATE "src/precomp.hpp"
+)
+
target_link_libraries(${TARGET_NAME} PUBLIC ${NGRAPH_LIBRARIES}
PRIVATE openvino::itt ngraph::builder)
* @file primitives_priority_attribute.hpp
*/
+#pragma once
+
#include <assert.h>
#include <functional>
#include <memory>
--- /dev/null
+// Copyright (C) 2020 Intel Corporation
+// SPDX-License-Identifier: Apache-2.0
+//
+
+#pragma once
+
+#include <ngraph/ngraph.hpp>
+#include <ngraph/ops.hpp>
+
+#include <algorithm>
+#include <functional>
+#include <initializer_list>
+#include <iterator>
+#include <map>
+#include <memory>
+#include <numeric>
+#include <ostream>
+#include <set>
+#include <sstream>
+#include <string>
+#include <tuple>
+#include <type_traits>
+#include <typeinfo>
+#include <unordered_set>
+#include <utility>
+#include <vector>
+
+#include <cassert>
+#include <cctype>
+#include <cmath>
+#include <cstdlib>
+#include <cstring>
IE
)
+ie_faster_build(${TARGET_NAME}
+ PCH PRIVATE "precomp.hpp"
+)
+
if(TARGET inference_engine_onnx_reader)
add_dependencies(${TARGET_NAME} inference_engine_onnx_reader)
endif()
// SPDX-License-Identifier: Apache-2.0
//
+#pragma once
+
#include <gtest/gtest.h>
#include <vector>
--- /dev/null
+// Copyright (C) 2020 Intel Corporation
+// SPDX-License-Identifier: Apache-2.0
+//
+
+#pragma once
+
+#include <gtest/gtest.h>
+
+#include <ngraph/ngraph.hpp>
+#include <ngraph/ops.hpp>
+
+#include <algorithm>
+#include <functional>
+#include <initializer_list>
+#include <iterator>
+#include <map>
+#include <memory>
+#include <numeric>
+#include <ostream>
+#include <set>
+#include <sstream>
+#include <string>
+#include <tuple>
+#include <type_traits>
+#include <typeinfo>
+#include <unordered_set>
+#include <utility>
+#include <vector>
+
+#include <cassert>
+#include <cctype>
+#include <cmath>
+#include <cstdlib>
+#include <cstring>
${EXPORT_DEPENDENCIES}
)
+ie_faster_build(${TARGET_NAME}
+ PCH PRIVATE "src/precomp.hpp"
+)
+
if (TARGET MKLDNNPlugin)
add_dependencies(${TARGET_NAME} MKLDNNPlugin)
endif()
PRIVATE
inference_engine_transformations
- )
\ No newline at end of file
+ )
#include "functional_test_utils/layer_test_utils.hpp"
namespace LayerTestsDefinitions {
-using axisShapeInShape = std::tuple<
+using axisUpdateShapeInShape = std::tuple<
std::vector<size_t>, // input shape
std::vector<size_t>, // indices shape
std::vector<size_t>, // update shape
int>; // axis
using scatterUpdateParamsTuple = typename std::tuple<
- axisShapeInShape, // shape description
+ axisUpdateShapeInShape, // shape description
std::vector<size_t>, // indices value
InferenceEngine::Precision, // input precision
InferenceEngine::Precision, // indices precision
virtual public LayerTestsUtils::LayerTestsCommon {
public:
static std::string getTestCaseName(const testing::TestParamInfo<scatterUpdateParamsTuple> &obj);
- static std::vector<axisShapeInShape> combineShapes(
+ static std::vector<axisUpdateShapeInShape> combineShapes(
const std::map<std::vector<size_t>, std::map<std::vector<size_t>, std::vector<int>>>& inputShapes);
protected:
void SetUp() override;
};
-} // namespace LayerTestsDefinitions
\ No newline at end of file
+} // namespace LayerTestsDefinitions
--- /dev/null
+// Copyright (C) 2020 Intel Corporation
+// SPDX-License-Identifier: Apache-2.0
+//
+
+#pragma once
+
+#include <gtest/gtest.h>
+
+#include <ngraph/ngraph.hpp>
+#include <ngraph/ops.hpp>
+#include <ngraph/type/float16.hpp>
+
+#include <algorithm>
+#include <functional>
+#include <initializer_list>
+#include <iterator>
+#include <map>
+#include <memory>
+#include <numeric>
+#include <ostream>
+#include <set>
+#include <sstream>
+#include <string>
+#include <tuple>
+#include <type_traits>
+#include <typeinfo>
+#include <unordered_set>
+#include <utility>
+#include <vector>
+
+#include <cassert>
+#include <cctype>
+#include <cmath>
+#include <cstdlib>
+#include <cstring>
namespace LayerTestsDefinitions {
std::string ScatterUpdateLayerTest::getTestCaseName(const testing::TestParamInfo<scatterUpdateParamsTuple> &obj) {
- axisShapeInShape shapeDescript;
+ axisUpdateShapeInShape shapeDescript;
std::vector<size_t> inShape;
std::vector<size_t> indicesShape;
std::vector<size_t> updateShape;
return result.str();
}
-std::vector<axisShapeInShape> ScatterUpdateLayerTest::combineShapes(
+std::vector<axisUpdateShapeInShape> ScatterUpdateLayerTest::combineShapes(
const std::map<std::vector<size_t>, std::map<std::vector<size_t>, std::vector<int>>>& inputShapes) {
- std::vector<axisShapeInShape> resVec;
+ std::vector<axisUpdateShapeInShape> resVec;
for (auto& inputShape : inputShapes) {
auto srcShape = inputShape.first;
auto srcRank = srcShape.size();
}
void ScatterUpdateLayerTest::SetUp() {
- axisShapeInShape shapeDescript;
+ axisUpdateShapeInShape shapeDescript;
InferenceEngine::SizeVector inShape;
InferenceEngine::SizeVector indicesShape;
InferenceEngine::SizeVector updateShape;
Run();
};
-} // namespace LayerTestsDefinitions
\ No newline at end of file
+} // namespace LayerTestsDefinitions
${EXPORT_DEPENDENCIES}
)
+ ie_faster_build(${ADD_TARGET_NAME}
+ UNITY
+ PCH PRIVATE "precomp.hpp"
+ )
+
# detecting regex support
if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.9)
set(USE_BOOST_RE ON)
--- /dev/null
+// Copyright (C) 2020 Intel Corporation
+// SPDX-License-Identifier: Apache-2.0
+//
+
+#pragma once
+
+#include <gtest/gtest.h>
+
+#include <ngraph/ngraph.hpp>
+#include <ngraph/ops.hpp>
+#include <ngraph/type/float16.hpp>
+
+#include <algorithm>
+#include <functional>
+#include <initializer_list>
+#include <iterator>
+#include <map>
+#include <memory>
+#include <numeric>
+#include <ostream>
+#include <set>
+#include <sstream>
+#include <string>
+#include <tuple>
+#include <type_traits>
+#include <typeinfo>
+#include <unordered_set>
+#include <utility>
+#include <vector>
+
+#include <cassert>
+#include <cctype>
+#include <cmath>
+#include <cstdlib>
+#include <cstring>
EXPORT_DEPENDENCIES ${EXPORT_DEPENDENCIES}
)
+ie_faster_build(${TARGET_NAME}
+ PCH PRIVATE "precomp.hpp"
+)
+
target_include_directories(${TARGET_NAME} PUBLIC
$<TARGET_PROPERTY:inference_engine_plugin_api,INTERFACE_INCLUDE_DIRECTORIES>
$<TARGET_PROPERTY:inference_engine_transformations,INTERFACE_INCLUDE_DIRECTORIES>
--- /dev/null
+// Copyright (C) 2020 Intel Corporation
+// SPDX-License-Identifier: Apache-2.0
+//
+
+#pragma once
+
+#include <gtest/gtest.h>
+
+#include <ngraph/ngraph.hpp>
+#include <ngraph/ops.hpp>
+#include <ngraph/type/float16.hpp>
+
+#include <algorithm>
+#include <functional>
+#include <initializer_list>
+#include <iterator>
+#include <map>
+#include <memory>
+#include <numeric>
+#include <ostream>
+#include <set>
+#include <sstream>
+#include <string>
+#include <tuple>
+#include <type_traits>
+#include <typeinfo>
+#include <unordered_set>
+#include <utility>
+#include <vector>
+
+#include <cassert>
+#include <cctype>
+#include <cmath>
+#include <cstdlib>
+#include <cstring>
${EXPORT_DEPENDENCIES}
)
+ie_faster_build(${TARGET_NAME}
+ UNITY
+ PCH PRIVATE "src/precomp.hpp"
+)
+
target_include_directories(${TARGET_NAME} PUBLIC ${PUBLIC_HEADERS_DIR})
target_link_libraries(${TARGET_NAME} PUBLIC ${EXPORT_DEPENDENCIES})
--- /dev/null
+// Copyright (C) 2020 Intel Corporation
+// SPDX-License-Identifier: Apache-2.0
+//
+
+#pragma once
+
+#include <ngraph/ngraph.hpp>
+#include <ngraph/ops.hpp>
+
+#include <algorithm>
+#include <functional>
+#include <initializer_list>
+#include <iterator>
+#include <map>
+#include <memory>
+#include <numeric>
+#include <ostream>
+#include <set>
+#include <sstream>
+#include <string>
+#include <tuple>
+#include <type_traits>
+#include <typeinfo>
+#include <unordered_set>
+#include <utility>
+#include <vector>
+
+#include <cassert>
+#include <cctype>
+#include <cmath>
+#include <cstdlib>
+#include <cstring>
add_library(${TARGET_NAME} STATIC ${SHARED_TESTS_SRC})
add_dependencies(${TARGET_NAME} inference_engine_preproc MultiDevicePlugin mock_engine)
+ie_faster_build(${TARGET_NAME}
+ UNITY
+ PCH PRIVATE "precomp.hpp"
+)
+
if(ENABLE_MKL_DNN)
add_dependencies(${TARGET_NAME} MKLDNNPlugin)
target_compile_definitions(${TARGET_NAME} PUBLIC ENABLE_MKL_DNN)
--- /dev/null
+// Copyright (C) 2020 Intel Corporation
+// SPDX-License-Identifier: Apache-2.0
+//
+
+#pragma once
+
+#include <gtest/gtest.h>
+
+#include <algorithm>
+#include <functional>
+#include <initializer_list>
+#include <iterator>
+#include <map>
+#include <memory>
+#include <numeric>
+#include <ostream>
+#include <set>
+#include <sstream>
+#include <string>
+#include <tuple>
+#include <type_traits>
+#include <typeinfo>
+#include <unordered_set>
+#include <utility>
+#include <vector>
+
+#include <cassert>
+#include <cctype>
+#include <cmath>
+#include <cstdlib>
+#include <cstring>
# Create shared library
add_library(ngraph SHARED ${LIBRARY_SRC} ${PUBLIC_HEADERS})
+if(COMMAND ie_faster_build)
+ ie_faster_build(ngraph
+ PCH PRIVATE "src/precomp.hpp"
+ )
+endif()
+
set_target_properties(ngraph PROPERTIES
CXX_VISIBILITY_PRESET hidden
C_VISIBILITY_PRESET hidden
# Create shared library
add_library(${TARGET_NAME} STATIC ${LIBRARY_SRC} ${PUBLIC_HEADERS})
+if(COMMAND ie_faster_build)
+ ie_faster_build(${TARGET_NAME}
+ UNITY
+ PCH PRIVATE "src/precomp.hpp"
+ )
+endif()
+
# Defines macro in C++ to load backend plugin
target_include_directories(${TARGET_NAME} PUBLIC ${BUILDER_INCLUDE_DIR})
target_include_directories(${TARGET_NAME} PRIVATE ${NGRAPH_INCLUDE_PATH}
--- /dev/null
+//*****************************************************************************
+// Copyright 2020 Intel Corporation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//*****************************************************************************
+
+#pragma once
+
+#include <algorithm>
+#include <functional>
+#include <iterator>
+#include <memory>
+#include <numeric>
+#include <sstream>
+#include <utility>
+#include <vector>
+
+#include <cstddef>
# Create shared library
add_library(${TARGET_NAME} STATIC ${LIBRARY_SRC} ${PUBLIC_HEADERS})
+if(COMMAND ie_faster_build)
+ ie_faster_build(${TARGET_NAME}
+ PCH PRIVATE "src/precomp.hpp"
+ )
+endif()
+
# Defines macro in C++ to load backend plugin
target_include_directories(${TARGET_NAME} PUBLIC ${REF_IMPL_INCLUDE_DIR})
target_include_directories(${TARGET_NAME} PRIVATE ${NGRAPH_INCLUDE_PATH}
--- /dev/null
+//*****************************************************************************
+// Copyright 2020 Intel Corporation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//*****************************************************************************
+
+#pragma once
+
+#include <algorithm>
+#include <numeric>
+#include <stdexcept>
+#include <utility>
+#include <vector>
+
+#include <cfenv>
+#include <cmath>
+#include <cstddef>
+#include <cstdio>
+#include <cstring>
--- /dev/null
+//*****************************************************************************
+// Copyright 2020 Intel Corporation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//*****************************************************************************
+
+#pragma once
+
+#include <algorithm>
+#include <atomic>
+#include <chrono>
+#include <condition_variable>
+#include <deque>
+#include <fstream>
+#include <functional>
+#include <initializer_list>
+#include <iomanip>
+#include <iostream>
+#include <limits>
+#include <list>
+#include <locale>
+#include <map>
+#include <memory>
+#include <mutex>
+#include <ostream>
+#include <set>
+#include <sstream>
+#include <stack>
+#include <stdexcept>
+#include <string>
+#include <thread>
+#include <tuple>
+#include <type_traits>
+#include <typeindex>
+#include <unordered_map>
+#include <unordered_set>
+#include <utility>
+#include <vector>
+
+#include <cstdarg>
+#include <cstddef>
+#include <cstdint>
+#include <cstdio>
+#include <cstdlib>
+#include <cstring>
file(GLOB_RECURSE PUBLIC_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/include/*.hpp)
# Remove disabled ops
-list(REMOVE_ITEM LIBRARY_SRC
+list(REMOVE_ITEM LIBRARY_SRC
${CMAKE_CURRENT_SOURCE_DIR}/src/op/conv_integer.cpp
${CMAKE_CURRENT_SOURCE_DIR}/src/op/gather_nd.cpp
${CMAKE_CURRENT_SOURCE_DIR}/src/op/quant_conv.cpp
)
-list(REMOVE_ITEM PUBLIC_HEADERS
+list(REMOVE_ITEM PUBLIC_HEADERS
${CMAKE_CURRENT_SOURCE_DIR}/include/onnx_import/op/conv_integer.hpp
${CMAKE_CURRENT_SOURCE_DIR}/include/onnx_import/op/gather_nd.hpp
${CMAKE_CURRENT_SOURCE_DIR}/include/onnx_import/op/quant_conv.hpp
# Create shared library
add_library(onnx_importer SHARED ${LIBRARY_SRC} ${PUBLIC_HEADERS})
+if(COMMAND ie_faster_build)
+ ie_faster_build(onnx_importer
+ PCH PRIVATE "src/precomp.hpp"
+ )
+endif()
+
target_link_libraries(onnx_importer PRIVATE onnx onnx_proto ${Protobuf_LIBRARIES} ngraph::builder)
target_link_libraries(onnx_importer PUBLIC ngraph)
$<INSTALL_INTERFACE:include/ngraph/frontend/>)
target_include_directories(onnx_importer SYSTEM PRIVATE ${NGRAPH_INCLUDE_PATH} ${NGRAPH_INCLUDE_PATH}/ngraph
${ONNX_INCLUDE_DIR} ${ONNX_PROTO_INCLUDE_DIR} ${Protobuf_INCLUDE_DIRS})
-target_include_directories(onnx_importer PRIVATE ${ONNX_IMPORT_INCLUDE_DIR}/onnx_import/core
+target_include_directories(onnx_importer PRIVATE ${ONNX_IMPORT_INCLUDE_DIR}/onnx_import/core
${ONNX_IMPORT_INCLUDE_DIR}/onnx_import/op
${ONNX_IMPORT_INCLUDE_DIR}/onnx_import/utils)
--- /dev/null
+//*****************************************************************************
+// Copyright 2020 Intel Corporation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//*****************************************************************************
+
+#pragma once
+
+#include <onnx/onnx_pb.h>
+
+#include <algorithm>
+#include <atomic>
+#include <chrono>
+#include <condition_variable>
+#include <deque>
+#include <fstream>
+#include <functional>
+#include <initializer_list>
+#include <iomanip>
+#include <iostream>
+#include <limits>
+#include <list>
+#include <locale>
+#include <map>
+#include <memory>
+#include <mutex>
+#include <ostream>
+#include <set>
+#include <sstream>
+#include <stack>
+#include <stdexcept>
+#include <string>
+#include <thread>
+#include <tuple>
+#include <type_traits>
+#include <typeindex>
+#include <unordered_map>
+#include <unordered_set>
+#include <utility>
+#include <vector>
+
+#include <cstdarg>
+#include <cstddef>
+#include <cstdint>
+#include <cstdio>
+#include <cstdlib>
+#include <cstring>