1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. long long mpow(long long a, long long b) {
  5. long long ans = 1;
  6. while(b) {
  7. if(b&1) ans *= a;
  8. a *= a;
  9. b >>= 1;
  10. }
  11. return ans;
  12. }
  13.  
  14. int main() {
  15. //freopen("inp14.txt", "r", stdin);
  16. //freopen("out14.txt", "w", stdout);
  17. int t = 1;
  18. //cin >> t;
  19. while(t--) {
  20. int n;
  21. cin >> n;
  22. long long int msks[n + 1], ans = 0;
  23. memset(msks, 0, sizeof(msks));
  24. for(int i = 2; i <= n; i++)
  25. for(int j = 1; j < i; j++)
  26. if(!(i%j))
  27. msks[i] ^= (1LL<<(j - 1));
  28. for(int i = 0; i < (1LL<<(n/3)); i++) {
  29. long long int now = 0;
  30. bool badsub = 0;
  31. for(int j = 1; j <= n/3; j++)
  32. if((i&msks[j]) && (i&(1LL<<(j - 1)))) now ^= (1LL<<(j - 1));
  33. for(int j = 1; j <= n/3; j++)
  34. if((now&msks[j]) && (i&(1LL<<(j - 1)))) badsub = 1;
  35. if(badsub) continue;
  36. vector<bool> bad(n + 1, 0);
  37. for(int j = 1; j <= n/3; j++) {
  38. if(now&(1LL<<(j - 1))) {
  39. for(int k = j + j; k <= n; k+=j)
  40. bad[k] = 1;
  41. }
  42. }
  43. int s1 = n - n/3, s2 = 0;
  44. for(int j = n/3 + 1; j <= n; j++)
  45. if(bad[j]) s1--;
  46. for(int j = n/3 + 1; j <= n/2; j++) {
  47. if((i&msks[j]) && !bad[j]) {
  48. if(!bad[2*j]) s1 -= 2, s2++;
  49. }
  50. }
  51. ans += mpow(2, s1)*mpow(3, s2);
  52. }
  53. cout << ans << "\n";
  54. }
  55. }