#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<queue>
#include<stack>
#include<vector>
using namespace std;
int n,ans,num=1;
bool f[1010],vis[1010];
void print(){
for(int i=1;i<=n;i++) cout<<f[i]<<" ";
getchar();getchar();
}
void dfs(int i,int sum,int ma,int nn){
if(nn>=n) {
if(sum==ans) num++;
else if(ans>sum) ans=sum,num=1;
return;
}
else if(i>n) return;
if(sum>ans||nn<i-1) return;
stack<int> s;
int now=0;
if(f[i]) dfs(i+1,sum,ma,nn);
for(int j=min(ma+i,n);j>=i;j--) {
if(f[j-i]&&f[j]==0) {
s.push(j);
now++;
f[j]=1;
}
}
dfs(i+1,sum+1,min(ma+i,n),nn+now);
while(s.size()){
f[s.top()]=0;
s.pop();
}
}
int main(){
scanf("%d",&n);
ans=n;
f[0]=1;
dfs(1,0,0,0);
printf("%d %d",ans,num);
return 0;
}