#include <iostream>
#include <limits>
using namespace std;


// Función para contar el número de dígitos en un número Dni
int contarDigitos(long long num) {
    int contador = 0;
    while (num > 0) {
        num /= 10;
        contador++;
    }
    return contador;
}

//sobrecarga para contar numero de digitos en un numero Legajo
int contarDigitos(int num){
    int contador = 0;
    while(num > 0){
        num /= 10;
        contador++;
    }
    return contador;
}

// Función para validar el DNI
bool validar(long long  dni){
    int numDigitos = contarDigitos(dni);
    int  minimoDigito = 8;
    int maximoDigito = 10;

    if (numDigitos >= minimoDigito && numDigitos <= maximoDigito) {
        return true;
    }
    return false;
}

//Sobrecarga funcion para validar Legajo
bool validar(int legajo){
    int numDigitos = contarDigitos(legajo);
    int minimoDigito = 4;
    int maximoDigito = 6;

    if(numDigitos >= minimoDigito && numDigitos <= maximoDigito){
        return true;
    }
    return false;
}


int main() {

    long long dni;
    cout << "DNI: ";
    cin >> dni;

    while (!validar(dni)) {
        cin.clear();//limpia el estado de error
        cin.ignore(numeric_limits<long long>::max(), '\n');
		cout << "DNI no valido."<<endl;
		cout<<"DNI: ";
		cin >> dni;
	}

    int legajo;
    cout << "LEGAJO: ";
    cin >> legajo;

    while (!validar(legajo)) {
        cin.clear();//limpia el estado de error
        cin.ignore(numeric_limits<int>::max(), '\n');
		cout << "Legajo no valido."<<endl;
		cout<<"LEGAJO: ";
		cin >> legajo;
	}



	return 0;
}

//numeric_limits para obtener el valor máximo posible de un tipo de datos del bufer
//<long long - int> :es el tipo de datos y max(): devuelve el valor máximo posible para ese tipo
