 //---------------------------------------------------------------------------
 int main(int argc, char *argv[]) {
     namespace po = boost::program_options;
+    namespace io = amgcl::io;
+
     using amgcl::prof;
     using std::vector;
     using std::string;

    }

    size_t rows;
    vector<int>    ptr, col;
    vector<double> val, rhs, null, x;

    if (vm.count("matrix")) {
        scoped_tic t(prof, "reading");

        using namespace amgcl::io;

        size_t cols;
        boost::tie(rows, cols) = mm_reader(vm["matrix"].as<string>())(
                ptr, col, val);

        precondition(rows == cols, "Non-square system matrix");

        if (vm.count("rhs")) {
            precondition(
                    boost::make_tuple(rows, 1) == mm_reader(vm["rhs"].as<string>())(rhs),
                    "The RHS vector has wrong size"
                    );
        } else {
            rhs.resize(rows, 1.0);
        }

        if (vm.count("null")) {
            size_t m, nv;
            boost::tie(m, nv) = mm_reader(vm["null"].as<string>())(null);
            precondition(m == rows, "Near null-space vectors have wrong size");

            prm.put("precond.coarsening.nullspace.cols", nv);
            prm.put("precond.coarsening.nullspace.rows", rows);

         "Should be a dense matrix of size N*M, where N is the number of "
         "unknowns, and M is the number of null-space vectors. "
         "Should only be provided together with a system matrix. "
        )
        (
         "binary,B",
         po::bool_switch()->default_value(false),
         "When specified, treat input files as binary instead of as MatrixMarket. "
         "It is assumed the files were converted to binary format with mm2bin utility. "
        )
        (
         "size,n",
