Problem Statement
There is an integer XX written on a blackboard. You can do the operation below any number of times (possibly zero).
- Choose an integer xx written on the blackboard.
- Erase one xx from the blackboard and write two new integers \lfloor \frac{x}{2}\rfloor⌊2x⌋ and \lceil \frac{x}{2}\rceil⌈2x⌉.
Find the maximum possible product of the integers on the blackboard after your operations, modulo 998244353998244353.
What are \lfloor \frac{x}{2}\rfloor⌊2x⌋ and \lceil \frac{x}{2}\rceil⌈2x⌉?
Constraints
- 1\leq X \leq 10^{18}1≤X≤1018
Input
Input is given from Standard Input from the following format:
XX
Output
Print the maximum possible product of the integers on the blackboard after your operations, modulo 998244353998244353.
Sample Input 1 Copy
Copy
15
Sample Output 1 Copy
Copy
192
Here is a sequence of operations that makes the product of the integers on the blackboard 192192.
- The initial state of the blackboard is (15)(15).
- An operation with x = 15x=15 changes it to (7, 8)(7,8).
- An operation with x = 7x=7 changes it to (8, 3, 4)(8,3,4).
- An operation with x = 4x=4 changes it to (8, 3, 2, 2)(8,3,2,2).
- An operation with x = 8x=8 changes it to (3, 2, 2, 4, 4)(3,2,2,4,4).
Here, the product of the integers on the blackboard is 3\times 2\times 2\times 4\times 4 = 1923×2×2×4×4=192.
Sample Input 2 Copy
Copy
3
Sample Output 2 Copy
Copy
3
Doing zero operations makes the product of the integers on the blackboard 33.
Sample Input 3 Copy
Copy
100
Sample Output 3 Copy
Copy
824552442
The maximum possible product of the integers on the blackboard after your operations is 58564588684700165856458868470016, which should be printed modulo 998244353998244353.
#include <bits/stdc++.h>
#define int long long
using namespace std;
int n,m=1,mod=998244353,sum;
map<int,int> p;
int f(int n)
{
if(p[n]) return p[n];
if(n<=3) return p[n]=n;
return p[n]=f(n>>1)*f(n+1>>1)%mod;
}
signed main()
{
cin>>n;
cout<<f(n);
}