using System;
using System.Collections.Generic;
using System.IO;

class Program {
    static void Main(string[] args) {
        RandomWalk rndwalk = new RandomWalk(int.Parse(args[0]));

        while(true) {
            if(Console.ReadLine() != "end") {
                foreach(int i in rndwalk.Tic()) {
                    Console.Write(i.ToString() + " ");
                }
                Console.WriteLine();
            } else {
                break;
            }
        }

        rndwalk.WriteLog(Environment.CurrentDirectory + "\\" + args[1]);

        using(StreamReader sr = new StreamReader(Environment.CurrentDirectory + "\\" + args[1])) {
            while(!sr.EndOfStream) {
                Console.WriteLine(sr.ReadLine());
            }
        }
        Console.ReadLine();
    }
}

class RandomWalk {
    int rank;
    List<int[]> log = new List<int[]>();
    Random rnd = new Random();
    int[] direction = new int[] { -1, 1 };

    public RandomWalk(int rank) {
        this.rank = rank;
        log.Add(new int[rank]);
    }

    public int[] Tic() {
        int changeRank = rnd.Next(0, rank);
        int[] pre = log[log.Count - 1];
        int[] ticedPoint = new int[rank];

        for(int i = 0; i < rank; i++) {
            if(i == changeRank) {
                ticedPoint[i] = pre[i] + direction[rnd.Next(0, 2)];
            } else {
                ticedPoint[i] = pre[i];
            }
        }

        log.Add(ticedPoint);

        return log[log.Count - 1];
    }

    public void WriteLog(string fileName) {
        using(StreamWriter sw = new StreamWriter(fileName)) {
            for(int time = 0; time < log.Count; time++) {
                int[] point = log[time];
                sw.Write(time + " ");
                foreach(int i in point) {
                    sw.Write(i.ToString() + " ");
                }
                sw.WriteLine();
            }
            sw.Close();
        }
    }
}