#!/usr/bin/env python

from typing import Iterator


def is_valid_password(p: int) -> bool:
    digits = str(p)

    def has_unique_adjacent_digit():
        counts = {d: 0 for d in range(10)}
        for (a, b) in zip(digits, digits[1:]):
            if a == b:
                counts[int(a)] += 1
        return any(count == 1 for count in counts.values())

    def digits_never_decrease():
        return all(a == b for a, b in zip(sorted(digits), digits))

    return has_unique_adjacent_digit() and digits_never_decrease()


def compute_pass(begin: int, end: int) -> Iterator[int]:
    for p in range(begin, end + 1):
        if is_valid_password(p):
            yield p


def main() -> None:
    begin = 264793
    end = 803935
    print(sum(1 for p in compute_pass(begin, end)))


if __name__ == "__main__":
    main()