import java.util.Scanner;
public class ALGO_180 {
private static boolean t=true;
private static int min=100;
private static String l="";
public static void main(String[] args) {
// TODO 自动生成的方法存根
int N;
Scanner as=new Scanner(System.in);
N=as.nextInt();
as.close();
int[] g=new int[100000];
int[] e=new int[100000];
String[] f=new String[100000];
g[0]=1;
f[0]="impossible";
int i=0,d=1,s=1,w=2,dx=1,sx=1,wx=4;
while(N>dx&&N>sx&&N>wx){
i++;
d++;
dx=dx+(d)*(d);
s=s+2;
sx=sx+s*s;
w=w+2;
wx=wx+w*w;
if(dx>sx&&wx>sx){
g[i]=sx;
f[i]=s+"L";
dx=dx-(d)*(d);
d--;
wx=wx-w*w;
w=w-2;
}else if (sx>dx&&wx>dx) {
g[i]=dx;
f[i]=d+"H";
sx=sx-s*s;
s=s-2;
wx=wx-w*w;
w=w-2;
}else if (dx>wx&&sx>wx) {
g[i]=wx;
f[i]=w+"L";
sx=sx-s*s;
s=s-2;
dx=dx-(d)*(d);
d--;
}else if(sx==dx&&sx<wx) {
g[i]=sx;
f[i]=s+"L";
i++;
g[i]=dx;
f[i]=d+"H";
wx=wx-w*w;
w=w-2;
}else if(sx==wx&&sx<dx) {
g[i]=sx;
f[i]=s+"L";
i++;
g[i]=wx;
f[i]=w+"L";
dx=dx-(d)*(d);
d--;
}else if(wx==dx&&wx<sx) {
g[i]=wx;
f[i]=w+"L";
i++;
g[i]=dx;
f[i]=d+"H";
wx=wx-w*w;
w=w-2;
}else if(wx==dx&&wx==sx) {
g[i]=wx;
f[i]=w+"L";
i++;
g[i]=dx;
f[i]=d+"H";
i++;
g[i]=wx;
f[i]=w+"L";
}
}
boolean p=true;
while(N<g[i]){
i--;
}
f(g,f,i+1,N,e,0);
if(t==false){
p=false;
}
if(p){
System.out.println("impossible");
}
System.out.println(l);
// f(g,f,i,N,e,0);
}
private static void f(int[] g, String[] f, int i, int n, int[] e, int j) {
// TODO 自动生成的方法存根
if(j<2){
for(int z=i;z>i/2;z--){
e[j]=z;
if(n-g[z]==0){
if(j<min){
l="";
min=j;
for(int w=0;w<=j;w++){
l=l+f[e[w]]+" ";
}
}
t=false;
}
f(g,f,z-1,n-g[z],e,j+1);
}
}else {
for(int z=i;z>0;z--){
e[j]=z;
if(n-g[z]==0){
if(j<min){
l="";
min=j;
for(int w=0;w<=j;w++){
l=l+f[e[w]]+" ";
}
}
t=false;
}
f(g,f,z-1,n-g[z],e,j+1);
}
}
}
}
由于比赛将近该题的难度颇高,且该题没有正确参考代码,估计本人的代码应该是最高得分。故先将这个代码分享下。待比赛结束再做修改和解释。有兴趣的可以关注下!