#include<iostream>
#include<algorithm>
#define int long long
typedef long long ll;
using namespace std;
const int N=1e5+5;
int a[N];
signed main()
{
int n,m;
cin >> n >> m;
int sum=0;
int ma=0;
for(int i=1;i<=n;i++){
cin >> a[i];
sum=sum+a[i];
ma=max(ma,a[i]);
}
int ans=max(ma,sum/m+(sum%m!=0));
int lef=ans;
int cnt=1;
for(int i=1;i<=n;i++){
if(lef>=a[i]){
cout << 1 << " " << cnt << " " << ans-lef << " " << ans-lef+a[i] << endl;
lef=lef-a[i];
if(!lef){
lef=ans;
cnt++;
}
}
else{
cout << 2 << " " << cnt+1 << " " << 0 << " " << a[i]-lef << " " << cnt << " " << ans-lef << " " << ans <<endl;
cnt++;
lef=ans-(a[i]-lef);
}
}
return 0;
}
#include<iostream>
#include<string.h>
#include<algorithm>
using namespace std;
const int N=9;
const int M=1<<N;
int map[M];
int ones[M];
int row[N];
int col[N];
int cell[3][3];
char str[100];
void init(){
for(int i=0;i<N;i++){
row[i]=col[i]=(1<<N)-1;
}
for(int i=0;i<3;i++){
for(int j=0;j<3;j++){
cell[i][j]=(1<<N)-1;
}
}
}
int lowbit(int x){
return x & (-x);
}
int get(int x, int y){
return row[x] & col[y] & cell[x / 3][y / 3];
}
void draw(int x,int y,int t,bool is_set){
if(is_set){
str[x*N+y]='1'+t;
}
else{
str[x*N+y]='.';
}
int v=1<<t;
if(!is_set){
v=-v;
}
row[x]-=v;
col[y]-=v;
cell[x/3][y/3]-=v;
}
bool dfs(int cnt){
if(!cnt){
return true;
}
int minv=10;
int x,y;
for(int i=0;i<N;i++){
for(int j=0;j<N;j++){
if(str[i*N+j]=='.'){
int state=get(i,j);
if(ones[state]<minv){
minv=ones[state];
x=i;
y=j;
}
}
}
}
int state=get(x,y);
for (int i=state;i;i=i-lowbit(i)){
int t = map[lowbit(i)];
draw(x, y, t, true);
if (dfs(cnt - 1)){
return true;
}
draw(x, y, t, false);
}
return false;
}
int main()
{
for(int i=0;i<N;i++){
map[1<<i]=i;
}
for(int i=0;i<M;i++){
for(int j=0;j<N;j++){
ones[i]+=(i>>j) &1;
}
}
while(cin >> str && str[0]!='e'){
init();
int cnt=0;
int k=0;
for(int i=0;i<N;i++){
for(int j=0;j<N;j++){
if(str[k]!='.'){
int t=str[k]-'1';
draw(i,j,t,true);
}
else{
cnt++;
}
k++;
}
}
dfs(cnt);
puts(str);
}
return 0;
}
#include<iostream>
#include<algorithm>
#include<math.h>
using namespace std;
const int N=25;
int minv[N],mins[N];
int R[N],H[N];
int n,m;
int ans=0x3f3f3f3f;
void dfs(int u,int v,int s){
if(v+minv[u]>n) return;
if(s+mins[u]>=ans) return;
if(s+2*(n-v)/R[u+1]>=ans) return;
if(!u){
if(v==n){
ans=s;
}
return;
}
for(int r=min(R[u+1]-1,(int)(sqrt(n-v)));r>=u;r--){
for(int h=min(H[u+1]-1,((n-v)/(r*r)));h>=u;h--){
int t=0;
if(u==m){
t=r*r;
}
R[u]=r;
H[u]=h;
dfs(u-1,v+r*r*h,s+2*r*h+t);
}
}
}
int main()
{
cin >> n >> m;
for(int i=1;i<=m;i++){
minv[i]=minv[i-1]+i*i*i;
mins[i]=mins[i-1]+2*i*i;
}
R[m+1]=0x3f3f3f3f;
H[m+1]=0x3f3f3f3f;
dfs(m,0,0);
if(ans==0x3f3f3f3f) ans=0;
cout << ans << endl;
return 0;
}
#include<iostream>
#include<algorithm>
#include<string.h>
using namespace std;
const int N=70;
int a[N];
int n,sum,len;
int vis[N];
bool cmp(int x,int y){
return x>y;
}
bool dfs(int x,int g,int st){
if(g*len==sum){
return true;
}
if(x==len){
return dfs(0,g+1,1);
}
for(int i=st;i<=n;i++){
if(vis[i]){
continue;
}
if(x+a[i]>len){
continue;
}
vis[i]=1;
if(dfs(x+a[i],g,i+1)){
return true;
}
vis[i]=0;
if(!x){
return false;
}
if(x+a[i]==len){
return false;
}
int j=i;
while(j<=n && a[j]==a[i]){
j++;
}
i=j-1;
}
return false;
}
int main()
{
while(cin >> n && n){
memset(vis,0,sizeof(vis));
sum=0;
for(int i=1;i<=n;i++){
cin >> a[i];
sum=sum+a[i];
}
sort(a+1,a+1+n,cmp);
len=1;
while(1){
if(sum%len==0 && dfs(0,1,1)){
cout << len << endl;
break;
}
len++;
}
}
return 0;
}
#include<iostream>
#include<algorithm>
#include<string.h>
using namespace std;
const int N=70;
int a[N];
int n,sum,len;
int vis[N];
bool cmp(int x,int y){
return x>y;
}
bool dfs(int x,int g,int st){
if(g*len==sum){
return true;
}
if(x==len){
return dfs(0,g+1,1);
}
for(int i=st;i<=n;i++){
if(vis[i]){
continue;
}
if(x+a[i]>len){
continue;
}
vis[i]=1;
if(dfs(x+a[i],g,i+1)){
return true;
}
vis[i]=0;
if(!x){
return false;
}
if(x+a[i]==len){
return false;
}
int j=i;
while(j<=n && a[j]==a[i]){
j++;
}
i=j-1;
}
return false;
}
int main()
{
while(cin >> n && n){
memset(vis,0,sizeof(vis));
sum=0;
for(int i=1;i<=n;i++){
cin >> a[i];
sum=sum+a[i];
}
sort(a+1,a+1+n,cmp);
len=1;
while(1){
if(sum%len==0 && dfs(0,1,1)){
cout << len << endl;
break;
}
len++;
}
}
return 0;
}