import std.stdio;
 
struct A
{
    private float[3] values;
 
    ref float opIndex(size_t i) { return values[i]; }
 
}
 
struct S
{
    A[3] values;
 
    this(float)
    {
        for(int i = 0; i < 3; ++i)
        {
            values[i][0] = 0;
            values[i][1] = 0;
            values[i][2] = 0;
        }
 
        values[0][0] = 1;
        values[1][1] = 2;
        values[2][2] = 3;
    }
 
    ref A opIndex(size_t i) { return values[i]; }
}
 
int main(string[] argv)
{
 
    enum v = S(1.0f);
 
    for(int i = 0; i < 3; ++i)
    {
        for(int j = 0; j < 3; ++j)
        {
            write(v[i][j], " ");
        }
        write("\n");
    }
 
    auto s = S(1.0f);
 
    for(int i = 0; i < 3; ++i)
    {
        for(int j = 0; j < 3; ++j)
        {
            write(s[i][j], " ");
        }
        write("\n");
    }
 
 
    return 0;
}