const zeroPadding = (num, length) => {
  return ('0000000000' + num).slice(-length);
};

const Main = (input) => {
  // 入力値の整形
  /*
  753数を出力する。
  */
  const numberArray = [7, 5, 3];
  const genaratedArray = Array(Math.pow(3, input.length))
    .fill(0)
    .map((a, b) => {
      return b.toString(3);
    })
    .reduce((accurator, value) => {
      // inputが3桁の場合は
      // 000~222?
      for (let index = value.length; index <= input.length; index++) {
        accurator.push(zeroPadding(value, index));
      }
      return accurator;
    }, [])
    .filter((value) => {
      return (
        value.split('').filter((x, i, self) => {
          return self.indexOf(x) === i;
        }).length === 3
      );
    })
    .map((value, index, romArray) => {
      return value.split('').reduce((accurator, value) => {
        return accurator + String(numberArray[value]);
      }, '');
    })
    .filter((value) => {
      return Number(value) <= Number(input);
    });

  console.log(genaratedArray.length);
};

//* この行以降は編集しないでください（標準入出力から一度に読み込み、Mainを呼び出します）
Main(require('fs').readFileSync('/dev/stdin', 'utf8'));
